Базы данных
SQLite (встроенная БД)
import sqlite3 # импорт модуля для SQLite
# Подключение (создаст файл, если нет)
conn = sqlite3.connect("database.db") # подключение к базе данных
cursor = conn.cursor() # присваивание
# Создание таблицы
cursor.execute(""" # выполнение SQL-запроса
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
)
""")
# Вставка
cursor.execute( # выполнение SQL-запроса
"INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
("Анна", 30, "anna@example.com")
)
conn.commit() # фиксация транзакции
# Чтение
cursor.execute("SELECT * FROM users WHERE age > ?", (18,)) # выполнение SQL-запроса
rows = cursor.fetchall() # все строки результата
for row in rows: # цикл по элементам
print(row) # вывод в консоль
# Одна строка
row = cursor.fetchone() # одна строка результата
# Закрытие
conn.close() # закрытие соединения
Контекстный менеджер
with sqlite3.connect("database.db") as conn: # контекстный менеджер
cursor = conn.cursor() # присваивание
cursor.execute("SELECT * FROM users") # выполнение SQL-запроса
rows = cursor.fetchall() # все строки результата
# conn.commit() — авто commit при выходе из with
# row_factory — доступ по имени колонки
conn = sqlite3.connect("database.db") # подключение к базе данных
conn.row_factory = sqlite3.Row # доступ к строке по имени колонки
cursor = conn.cursor() # присваивание
cursor.execute("SELECT * FROM users") # выполнение SQL-запроса
row = cursor.fetchone() # одна строка результата
print(row["name"]) # вывод в консоль
Транзакции
try: # начало блока с обработкой исключений
cursor.execute("BEGIN") # выполнение SQL-запроса
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1") # выполнение SQL-запроса
cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2") # выполнение SQL-запроса
conn.commit() # фиксация транзакции
except Exception: # обработка исключения
conn.rollback() # откат транзакции
print("Транзакция откачена") # вывод в консоль
Сырой SQL vs ORM
Для работы с БД в Python часто используют ORM:
- SQLAlchemy — мощный ORM с полным контролем
- Django ORM — встроен в Django, удобен для веб-приложений
- Peewee — лёгкий ORM для небольших проектов
# SQLAlchemy (пример)
from sqlalchemy import create_engine, Column, Integer, String # импорт модуля
from sqlalchemy.orm import declarative_base, Session # импорт модуля
Base = declarative_base() # присваивание
class User(Base):
__tablename__ = "users" # строковое значение
id = Column(Integer, primary_key=True) # присваивание
name = Column(String) # присваивание
age = Column(Integer) # присваивание
engine = create_engine("sqlite:///database.db") # присваивание
Base.metadata.create_all(engine)
with Session(engine) as session: # контекстный менеджер
user = User(name="Анна", age=30) # присваивание
session.add(user)
session.commit()