Ответ
Для создания движка (engine) в SQLAlchemy используется функция create_engine(). Эта функция является центральной точкой входа для взаимодействия с базой данных. Она принимает строку подключения к БД и возвращает объект Engine, который управляет пулом соединений и диалектом базы данных.
Примеры использования create_engine() для разных баз данных:
from sqlalchemy import create_engine
# Для SQLite (файл в текущей директории)
engine_sqlite = create_engine('sqlite:///database.db')
# Для PostgreSQL
# Формат: 'postgresql://user:password@host:port/dbname'
engine_pg = create_engine('postgresql://user:password@localhost:5432/mydatabase')
# Для MySQL с использованием драйвера PyMySQL
# Формат: 'mysql+pymysql://user:password@host:port/dbname'
engine_mysql = create_engine('mysql+pymysql://user:password@localhost:3306/mydb')
Дополнительные параметры, которые можно передать в create_engine():
echo=True: Включает логирование всех SQL-запросов, выполняемых движком, что очень полезно для отладки.pool_size=N: Устанавливает максимальное количество соединений в пуле. По умолчанию 5.max_overflow=M: Максимальное количество соединений, которые могут быть созданы сверхpool_sizeпри пиковой нагрузке.future=True: Активирует использование API 2.0 стиля, который является рекомендуемым для новых проектов.
Объект Engine является фундаментальным компонентом SQLAlchemy, обеспечивающим низкоуровневое взаимодействие с базой данных.
Ответ 18+ 🔞
Давай разберём эту вашу движуху create_engine(), а то некоторые думают, что это какой-то паровоз в базу данных собирать. Это, блядь, центральная дверь, через которую твоё приложение начинает материться на SQL-диалекте с самой базой.
Функция эта, create_engine(), как раз и есть тот самый волшебный пендель, который превращает строку подключения в живой, дышащий объект Engine. А этот объект — он уже и пулом соединений рулит, и понимает, какую хуйню в какую базу данных говорить.
Смотри, как эта поебота выглядит на практике:
from sqlalchemy import create_engine
# Для SQLite (база в файле, проще некуда)
engine_sqlite = create_engine('sqlite:///database.db')
# Для PostgreSQL (тут уже с логином-паролем, ёпта)
# Формат: 'postgresql://юзер:пароль@хост:порт/база'
engine_pg = create_engine('postgresql://user:password@localhost:5432/mydatabase')
# Для MySQL через PyMySQL (опять же, не перепутай порядок, а то не зайдёшь)
# Формат: 'mysql+pymysql://юзер:пароль@хост:порт/база'
engine_mysql = create_engine('mysql+pymysql://user:password@localhost:3306/mydb')
А теперь, внимание, сюрприз! Этой функции можно намекнуть, как себя вести. Не просто строку кинуть, а ещё и флажков поддать:
echo=True: Включишь — и он тебе всю свою кухню начнёт вываливать в консоль, каждый SQL-запрос. Для отладки — овердохуища полезно, а потом обычно вырубаешь, а то спамит, сука.pool_size=N: Скажешь, сколько соединений держать в запасе на чёрный день. По умолчанию их 5, как пальцев на руке.max_overflow=M: Это на случай, если все 5 заняты, а запросы всё лезут. Сколько ещё сверх лимита можно наскрести. А то без этого — очередь и пиздец.future=True: Вот это, блядь, важный флажок. Включает новый, второй стиль API. Ставь, если проект новый, не оглядывайся на старьё.
Вот этот самый объект Engine, который получишь — он и есть фундамент, та самая первая хуйня, с которой всё начинается. Без него нихуя не получится.