Базы данных и ORM в Python
От низкоуровневого DB-API модуля sqlite3 до моделей, сессий и миграций SQLAlchemy
sqlite3), где вы пишете SQL вручную, и ORM (SQLAlchemy), которая отображает строки таблиц на объекты Python, так что вы в основном работаете на Python. Одно не заменяет другое — ORM построена поверх DB-API, и знание обоих позволяет выбирать осознанно.
- открыть соединение, выполнить SQL через курсор и зафиксировать транзакцию с помощью
commitвsqlite3, - использовать параметризованные запросы, чтобы защититься от SQL-инъекций,
- объяснить, что и зачем отображает ORM,
- определить модель SQLAlchemy 2.0 и управлять Session (единицей работы),
- описать, какую задачу решают миграции (Alembic), и реальные компромиссы ORM.
1. Почему база данных, а не файл?
Вы уже умеете читать и писать JSON и CSV. Файлы прекрасны для небольших данных с одним писателем. База данных оправдывает себя, когда нужно что-либо из: запросы («все заказы дороже 100 за прошлую неделю» без загрузки всего в память), конкурентность (много читателей и писателей без повреждения файла), целостность (типы, уникальность, внешние ключи, проверяемые движком) и транзакции (группа изменений, которая происходит либо целиком, либо никак).
SQLite — самый мягкий вход: это полноценный SQL-движок, живущий в одном файле, поставляемый с Python как модуль sqlite3 и не требующий сервера. Тот же DB-API, который вы изучаете здесь, — стандартный интерфейс (PEP 249), который реализуют и psycopg для PostgreSQL, и драйверы MySQL, поэтому формы переносятся.