← Назад к вопросам
Какой функцией создается движок 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,
}
)
Обычные параметры
| Параметр | Значение | Описание |
|---|---|---|
echo | True/False | Вывод SQL в логи |
pool_size | 5 | Стандартное кол-во соединений |
max_overflow | 10 | Доп. соединения при нагрузке |
pool_pre_ping | True | Проверка жив ли сервер |
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