← Назад к вопросам

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

2.0 Middle🔥 291 комментариев
#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Функция create_engine() в SQLAlchemy

Движок SQLAlchemy создаётся функцией create_engine() из модуля sqlalchemy. Это основной компонент для работы с базами данных.

Базовое использование

from sqlalchemy import create_engine

# PostgreSQL
engine = create_engine("postgresql://user:password@localhost:5432/mydb")

# SQLite
engine = create_engine("sqlite:///database.db")

# MySQL
engine = create_engine("mysql+pymysql://user:password@localhost:3306/mydb")

Структура URL подключения

dialect+driver://username:password@host:port/database
  • dialect — тип БД (postgresql, mysql, sqlite и т.д.)
  • driver — драйвер для работы (psycopg2, pymysql, cx_Oracle)
  • username:password — учётные данные
  • host:port — адрес и порт сервера
  • database — имя БД

Параметры create_engine()

from sqlalchemy import create_engine

engine = create_engine(
    "postgresql://user:pass@localhost/db",
    echo=True,              # Логирование SQL запросов
    pool_size=5,            # Размер пула соединений
    max_overflow=10,        # Макс доп. соединения за пределы пула
    pool_recycle=3600,      # Переиспользование соединений
    pool_pre_ping=True,     # Проверка соединения перед использованием
    connect_args={          # Дополнительные аргументы
        "timeout": 10,
    }
)

Обычные параметры

ПараметрЗначениеОписание
echoTrue/FalseВывод SQL в логи
pool_size5Стандартное кол-во соединений
max_overflow10Доп. соединения при нагрузке
pool_pre_pingTrueПроверка жив ли сервер
isolation_level"READ_COMMITTED"Уровень изоляции транзакций

Практический пример

from sqlalchemy import create_engine, text

# Создание движка
engine = create_engine(
    "postgresql://postgres:123456@localhost:5432/app_db",
    echo=False,
    pool_size=10,
    pool_pre_ping=True,
)

# Проверка подключения
with engine.connect() as connection:
    result = connection.execute(text("SELECT 1"))
    print(result.fetchone())  # (1,)

# Для ORM работы
from sqlalchemy.orm import Session

session = Session(engine)
# Работа с ORM моделями
session.close()

Контекстный менеджер

from sqlalchemy import create_engine

engine = create_engine("sqlite:///test.db")

# Автоматическое закрытие соединения
with engine.begin() as connection:
    result = connection.execute(text("SELECT COUNT(*) FROM users"))
    print(result.scalar())  # Кол-во пользователей

Разница между engine и connection

  • engine — фабрика соединений, управляет пулом
  • connection — конкретное соединение из пула для работы
engine = create_engine("postgresql://user:pass@localhost/db")

# Engine управляет пулом
with engine.connect() as conn:  # Получаем connection из пула
    result = conn.execute(text("SELECT * FROM users"))

Проверка соединения

from sqlalchemy import create_engine, inspect

engine = create_engine("postgresql://...")

# Проверка подключения
try:
    with engine.connect() as conn:
        print("Connection successful!")
except Exception as e:
    print(f"Connection failed: {e}")

Итоги

  • create_engine() — единственный способ создать движок SQLAlchemy
  • Параметры критичны: pool_size, echo, pool_pre_ping
  • Всегда используй контекстный менеджер для безопасного закрытия соединений
  • Engine — это фабрика для работы как с core, так и с ORM