Подключение к базе данных
import sqlite3 # Подключаем встроенный модуль sqlite3 для работы с SQLite
# Подключение к базе данных (если файла базы нет, он будет создан)
conn = sqlite3.connect('example.db') # 'example.db' — имя файла базы данных
cursor = conn.cursor() # Создаем объект курсора для выполнения SQL-запросов
Создание таблицы
# Создаем таблицу для хранения информации о пользователях
cursor.execute('''
CREATE TABLE IF NOT EXISTS users ( # -- Создаем таблицу, если она еще не существует
id INTEGER PRIMARY KEY AUTOINCREMENT, # -- Уникальный идентификатор, автоинкремент
username TEXT NOT NULL, # -- Имя пользователя, обязательно для заполнения
email TEXT UNIQUE NOT NULL, # -- Email пользователя, обязательно и уникально
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP # -- Дата и время создания записи, по умолчанию текущая дата
)
''')
# Применяем изменения (фиксируем их в файле базы данных)
conn.commit()
Вставка данных
# Добавляем нового пользователя в таблицу
cursor.execute('''
INSERT INTO users (username, email) # -- Указываем, какие поля заполняем
VALUES (?, ?) # -- Место для подстановки значений (используем параметризованный запрос)
''', ('admin', 'admin@example.com')) # Передаем значения для вставки
conn.commit() # Сохраняем изменения в базе данных
Чтение данных
# Выполняем запрос на выборку всех записей из таблицы
cursor.execute('SELECT * FROM users') # SQL-запрос без условий (выбирает все строки)
rows = cursor.fetchall() # Получаем все строки результата
# Перебираем строки и выводим их
for row in rows:
print(row) # Каждая строка — это кортеж (id, username, email, created_at)
Обновление данных
# Обновляем email пользователя с определенным именем
cursor.execute('''
UPDATE users # -- Обновляем данные в таблице
SET email = ? # -- Задаем новое значение для поля email
WHERE username = ? # -- Условие обновления: обновляем только для указанного username
''', ('new_admin@example.com', 'admin')) # Передаем новое значение и имя пользователя
conn.commit() # Сохраняем изменения
Удаление данных
# Удаляем запись о пользователе с определенным именем
cursor.execute('''
DELETE FROM users # -- Удаляем данные из таблицы
WHERE username = ? # -- Условие удаления: только для указанного username
''', ('admin',)) # Передаем значение для удаления
conn.commit() # Применяем изменения
Закрытие соединения
# Закрываем соединение с базой данных, чтобы освободить ресурсы
conn.close() # Это важно для предотвращения утечек ресурсов
Контекстный менеджер для упрощения работы
# Используем контекстный менеджер для автоматического закрытия соединения
with sqlite3.connect('example.db') as conn: # Автоматически закрывает соединение по завершении блока
cursor = conn.cursor() # Создаем курсор
cursor.execute('SELECT * FROM users') # Выполняем запрос
print(cursor.fetchall()) # Выводим все строки результата
Обработка ошибок
try:
# Попытка подключения к базе данных
conn = sqlite3.connect('example.db') # Открываем соединение
cursor = conn.cursor() # Создаем курсор
cursor.execute('SELECT * FROM non_existent_table') # Выполняем запрос к несуществующей таблице
except sqlite3.Error as e: # Ловим исключение SQLite
print(f"Ошибка SQLite: {e}") # Выводим сообщение об ошибке
finally:
conn.close() # Закрываем соединение даже в случае ошибки
Пример: Управление пользователями
import sqlite3 # Модуль для работы с SQLite
# Функция подключения к базе данных
def connect_db(db_name='example.db'):
"""
Подключается к базе данных с указанным именем.
Если файл базы отсутствует, он будет создан автоматически.
"""
return sqlite3.connect(db_name)
# Функция для создания таблицы
def create_table():
"""
Создает таблицу users для хранения информации о пользователях.
Если таблица уже существует, повторное создание не производится.
"""
with connect_db() as conn: # Автоматическое закрытие соединения
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit() # Применяем изменения
# Функция для добавления пользователя
def add_user(username, email):
"""
Добавляет нового пользователя в базу данных.
"""
with connect_db() as conn:
cursor = conn.cursor()
try:
cursor.execute('INSERT INTO users (username, email) VALUES (?, ?)', (username, email))
conn.commit()
print(f"Пользователь {username} успешно добавлен.")
except sqlite3.IntegrityError as e: # Обрабатываем ошибки целостности (например, повторный email)
print(f"Ошибка добавления: {e}")
# Функция для отображения всех пользователей
def list_users():
"""
Выводит список всех пользователей из базы данных.
"""
with connect_db() as conn:
cursor = conn.cursor()
cursor.execute('SELECT * FROM users') # Выбираем все записи
for row in cursor.fetchall(): # Перебираем строки результата
print(row)
# Основная функция программы
def main():
"""
Основной сценарий: создание таблицы, добавление пользователя и вывод всех пользователей.
"""
create_table() # Создаем таблицу (если она еще не существует)
add_user('admin', 'admin@example.com') # Добавляем пользователя
list_users() # Отображаем список пользователей
# Запуск программы
if __name__ == '__main__':
main()