Найти тему
Computer Pro

SQLAlchemy. Создание таблиц и добавление в них данных. #2

Продолжаем изучение SQLAlchemy, первая (#1) часть:

После первой части код был немного переработан. Создана отдельная директория (queries), которая будет отвечать за отправку запросов к базе данных. Структура приложения получилась примерно такая:

запуск функций из модуля queries.core
запуск функций из модуля queries.core
здесь описывается создаваемая таблица workers
здесь описывается создаваемая таблица workers
-4

Все запросы к базе данных перекочевали в файл core.py, который располагается в директории queries:

созданы три функции, которые будут последовательно вызваны в файле main.py
созданы три функции, которые будут последовательно вызваны в файле main.py

Ну и при запуске файла main.py будут вызваны функции создания таблицы, наполнения ее данными и выборкой всех данных из этой таблицы:

-6

Открыл базу данных в DBEaver, есть некие отличия от SQLite, непривычно немного но освоиться возможно.

-7

Но писать запросы с помощью текстовых запросов SQL это не наш метод, ведь мы изучаем ORM, так что попробуем вставить еще что-то в БД с помощью ORM:

-8
-9

Запускаем скрипт (вызов функции по удалению и потом созданию таблицы я закомментировал), и вот наши два username добавлены в базу данных:

-10

Ну вот, всё чудненько сработало. Можно продолжать изучение SQLAlchemy.

Далее рассмотрим как всё это работает в декларативном стиле, через объявление классов. Код снова существенно изменится.

Сейчас мы будем работать через "сессию". Сессия нужна для выполнения каких либо запросов к базе данных. Сделали запрос, сделали коммит или роллбэк (отменить какие либо изменения), закрыли сессию.

-11

Затем нужно объявить "базу", наследника от DeclarativeBase. "База" ничего выполнять не будет, просто будет объявлена а затем использована:

-12

Я было подумал, а "нахрена козе баян", я разве не могу напрямую объявить свой собственный класс, который будет непосредственным наследником от DeclarativeBase!? Оказывается - так не работает, без "Base" не работает...

-13

Объявляем класс WorkersORM, который будет наследником от ничего не делающего Base, который в свою очередь наследник от DeclarativeBase. В нем пропишем так же как и ранее два поля id и username, плюс нужно обязательно задать имя таблицы с помощью __tablename__:

-14

Ну вот, осталось воспользоваться данным классом и создать таблицу, заполнить ее данными и считать эти данные:

-15

В main.py меняю импорт функций, на только что написанные, в файле orm.py:

-16

Запускаем и проверяем:

-17

Ну и в завершении, допишу - как будет выглядеть такая же функция в асинхронном исполнении:

-18

И её вызов, с удачным выполнением:

-19

Ну вот, на сегодня - всё. Напоследок - лозунг из моего детства:

-20