Какой функцией создается движок SQLAlchemy?

Ответ

Для создания движка (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, который получишь — он и есть фундамент, та самая первая хуйня, с которой всё начинается. Без него нихуя не получится.