Начало любого приложения с использованием SQLAlchemy начинается с объекта, называемого машиной соединений (англ. Engine). Этот объект представляет собой центральный компонент, осуществлящий соединения к отдельным базам данных, предоставляя также фабрику соединений (или пул соединений, англ. connection pool) для работы с ними. Машина является фактически глобальным объектом, создаваемым единожды с заданными настройками для подключения к базе данных, которые чаще всего представляют собой строчку URL.
Для данного туториала мы будем использовать SQLite базу данных, так как это простой способ показать и протестировать простые вещи, без необходимости поднятия полноценного сервера. Машина соединения создается при помощи функции create_engine(), при этом если передать в качестве ее параметра future=True, то мы получим полный доступ к использованию нового стиля SQLAlchemy 2.0:
from sqlalchemy import create_engine
engine = create_engine("sqlite+pysqlite:///:memory:", echo=True, future=True)
Главный аргумент для функции create_engine это строчка URL, выше мы передали строчку для подключения к SQLite базе данных прямо в оперативной памяти нашего компьютера (то есть даже без создания файла бд). Эта строчка передает три важных факта:
<aside> ⚠️ Машина соединений, которая возвращается при исполнении функции create_engine(), на самом деле не пытается сразу же подключиться к базе данных по переданному URL, и сделает это лишь при первом обращении к базе данных. Такой паттерн поведения называют ленивой инициализацией (англ. lazy initialization).
</aside>
Обратите внимание, что мы также передали параметр echo=True, который приказывает нашей машине сообщать о всех SQL запросах в логер Python, который в свою очередь будет передавать их в системный вывод (условно консоль). По большому счету, данный параметр всего лишь более простой путь настроить логирование и это может быть очень полезно в некоторых ситуациях.