Українська
Репозиторій, тести та типові помилки
Репозиторій, тести та зміна схеми
Репозиторій відокремлює предметні операції доступу від CLI. Він може мати add, get, list, але не повинен приховано виконувати commit після кожного дрібного кроку, якщо сервіс має об’єднати їх в одну транзакцію. Власник транзакції повинен бути зрозумілим із контракту: сервіс або контекст верхнього рівня.
Тести перевіряють не лише успішну вставку. Потрібні дубль унікального поля, відсутній батьківський ключ, від’ємна сума, rollback часткового пакета й порожня вибірка. Для SQLite :memory: кожне незалежне з’єднання зазвичай має окрему базу; не створюйте схему на одному з’єднанні й не очікуйте її на іншому. У простій ORM-фікстурі створюйте окремий engine на кожний тест і закривайте сесію до engine.dispose().
SQLAlchemy не усуває відмінності СКБД. Перехід до PostgreSQL потребує відповідного драйвера, URL, перевірки типів, SQL і транзакційної поведінки, а не лише заміни рядка. У цій темі порівнюємо підходи на одній SQLite-базі, щоб не змішувати вивчення ORM з адмініструванням серверної СКБД.
Alembic є окремим інструментом версійних міграцій для SQLAlchemy. На високому рівні його можна дослідити додатково: метадані моделей порівнюються зі схемою, але автоматично створений сценарій обов’язково переглядають. Він не вгадує безпомилково перейменування чи перетворення наявних даних. Перед зміною робочої бази потрібні резервна копія й перевірка сценарію на копії; create_all не замінює міграцію. Огляд: https://alembic.sqlalchemy.org/en/latest/tutorial.html.
Для перегляду навчального файла можна використати DataGrip: створити джерело SQLite, вибрати файл і перевірити з’єднання. Використовуйте саме шлях створеної бази, а не випадково новий порожній файл. CLI і Python достатні для виконання завдань; GUI допомагає побачити схему та результати запитів. https://www.jetbrains.com/help/datagrip/connecting-to-a-database.html.
Знімок екрана
Data Source → SQLite; нейтральний шлях; Test Connection.
Рис. 12.10. Підключення DataGrip до навчального файла SQLite.
Знімок екрана
Схема students/grades; показати рядок студента без оцінок.
Рис. 12.11. LEFT JOIN та групування оцінок у консолі запитів.
Типові помилки
- PRAGMA зовнішніх ключів виконана всередині відкритої транзакції. Налаштуйте з’єднання до переходу до
autocommit=False. with dbсприймається як закриття ресурсу. Додайтеclosingабо явнеcloseпісля завершення всіх транзакцій.- Значення вставлене через f-рядок. Передавайте параметри окремо; назви полів обирайте лише з дозволеного набору.
- Після помилки частина імпорту лишається в базі. Об’єднайте весь пакет однією транзакцією й ловіть виняток зовні.
create_allочікують як оновлення схеми. Використовуйте контрольовану міграцію або нову одноразову навчальну базу.- Об’єкт із закритої сесії потребує лінивого завантаження. Отримайте потрібні дані до закриття, не ховайте запити в друці.
- Вибірка без
ORDER BYвикористовується як стабільний звіт. Задайте повний порядок, включно з унікальним ключем.