Sqlalchemy.create engine: примеры (PYTHON)
sqlalchemy.create_engine(url: str, **kwargs): sqlalchemy.engine.EngineОписание функции sqlalchemy.create_engine
Функция create_engine() является основной точкой входа для работы с библиотекой SQLAlchemy. Она предназначена для создания объекта "движка" (Engine), который представляет собой центральный источник подключений к базе данных. Этот объект скрывает детали подключения и предоставляет пул соединений для эффективной работы.
Использование функции актуально в начале работы с ORM или Core SQLAlchemy для установки соединения с реляционными СУБД, такими как PostgreSQL, MySQL, SQLite, Oracle и другими.
Аргументы функции
- url (строка или объект
URL) – обязательный аргумент. Строка подключения в форматеdialect+driver://username:password@host:port/database. - connect_args (словарь) – дополнительные аргументы, которые передаются непосредственно драйверу базы данных при установке соединения.
- echo (булево значение) – если установлено в
True, движок будет логировать все SQL-запросы. - poolclass – класс пула соединений для использования (например,
StaticPool,QueuePool). - pool_size (целое число) – количество соединений для хранения в пуле.
- max_overflow (целое число) – максимальное количество соединений сверх
pool_size, которые могут быть созданы. - pool_recycle (целое число) – время в секундах, после которого соединение переподключается автоматически.
- future (булево значение) – использование стиля API версии 2.0. В SQLAlchemy 2.0 этот аргумент стал устаревшим.
Возвращаемое значение
Функция возвращает объект sqlalchemy.engine.Engine. Этот объект не является самим соединением, а фабрикой для их создания. Для получения подключения используется метод Engine.connect() или работа через сессии ORM.
Примеры использования create_engine
Подключение к SQLite базе данных в памяти:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:', echo=True)# Логирование SQL будет выводиться в консоль при выполнении запросов.
Подключение к PostgreSQL с использованием psycopg2:
engine = create_engine('postgresql+psycopg2://user:pass@localhost/mydb',
pool_size=20,
max_overflow=0)# Создан движок с пулом из 20 фиксированных соединений.
Подключение к MySQL с дополнительными аргументами:
engine = create_engine('mysql+pymysql://user:pass@localhost/test',
connect_args={'charset': 'utf8mb4'},
pool_recycle=3600)# Установлена кодировка соединения и время переподключения 1 час.
Похожие функции и подходы в Python
Для работы с базами данных в Python существуют другие библиотеки и встроенные модули.
- sqlite3.connect() (встроенный модуль) – прямое подключение к SQLite. Используется для простых проектов только с этой СУБД без абстракции ORM.
- psycopg2.connect() – низкоуровневое подключение к PostgreSQL. Применяется когда не требуется функционал ORM или нужен прямой контроль.
- database.connect() из библиотек типа
asyncpgилиaiomysql– асинхронные драйверы. Предпочтительны в асинхронных приложениях (FastAPI, aiohttp). SQLAlchemy также предлагает асинхронный движок черезcreate_async_engine. - Встроенные инструменты фреймворков (например, Django ORM). Используются в проектах, построенных на этих фреймворках, для обеспечения интеграции.
Функция create_engine является универсальным решением для SQLAlchemy, объединяющим пуллинг, диалекты и интеграцию с ORM.
Аналоги функции в других языках программирования
В других экосистемах существуют похожие концепции для подключения к базе данных.
JavaScript (Node.js с библиотекой mysql2):
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});// Создан пул соединений с ограничением в 10 подключений.
Java (JDBC с HikariCP):
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost/test");
config.setUsername("user");
config.setPassword("pass");
config.setMaximumPoolSize(20);
HikariDataSource ds = new HikariDataSource(config);// Создан источник данных с пулом соединений HikariCP.
PHP (PDO):
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$pdo = new PDO($dsn, 'user', 'pass', $options);// Создан объект PDO, представляющий подключение к базе данных.
Основное отличие SQLAlchemy – глубокая интеграция с ORM и система выражений Core, в то время как аналоги часто предоставляют только клиент для выполнения запросов.
Распространенные ошибки и их решение
Ошибка из-за некорректного URL или отсутствия драйвера:
engine = create_engine('postgresql://user:pass@localhost/mydb')
# При отсутствии psycopg2ModuleNotFoundError: No module named 'psycopg2'
Решение: установить драйвер pip install psycopg2-binary или использовать другой.
Ошибка аутентификации или недоступности сервера:
engine = create_engine('mysql://wrong:pass@localhost/db')
connection = engine.connect() # Попытка подключенияOperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'wrong'@'localhost' (using password: YES)")
Решение: проверить учетные данные, хост и порт.
Использование устаревшего формата URL для SQLAlchemy 2.0+:
# В старом стиле (1.x) использование 'future' аргумента
engine = create_engine("postgresql://...", future=True) # Устарело в 2.0В версии 2.0 API по умолчанию использует новый стиль, а аргумент future не требуется.
Изменения в последних версиях SQLAlchemy
В SQLAlchemy 2.0 произошли значительные изменения в API, затронувшие и create_engine.
- Аргумент
futureбыл удален. Новый стиль API 2.0 используется по умолчанию. - Упрощена и унифицирована система типизации результатов запросов.
- Рекомендуется использовать новый стиль работы с сессиями через
sessionmaker. - Появилась явная поддержка асинхронного API через функцию
create_async_engine, возвращающуюAsyncEngine.
Для миграции с версии 1.4 на 2.0 обычно требуется обновить код в соответствии с рекомендациями, но большинство аргументов create_engine остались обратно совместимыми.
Расширенные примеры использования
Создание движка с пользовательским пулом соединений для тестов (StaticPool):
from sqlalchemy.pool import StaticPool
engine = create_engine('sqlite://',
connect_args={'check_same_thread': False},
poolclass=StaticPool,
echo=True)# Создано однопоточное соединение, часто используется в тестах.
Интеграция с протоколом PostgreSQL для автоматического определения схемы:
from sqlalchemy import event
def on_connect(dbapi_connection, connection_record):
cursor = dbapi_connection.cursor()
cursor.execute("SET search_path TO myschema, public")
engine = create_engine('postgresql+psycopg2://...')
event.listen(engine, 'connect', on_connect)# При каждом новом соединении будет устанавливаться путь к схеме.
Использование асинхронного движка в SQLAlchemy 2.0:
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
async_engine = create_async_engine(
"postgresql+asyncpg://user:pass@localhost/dbname",
echo=True,
pool_size=10,
max_overflow=20
)
AsyncSessionLocal = sessionmaker(async_engine, class_=AsyncSession, expire_on_commit=False)# Создан асинхронный движок и фабрика сессий для использования с async/await.
Подключение к Microsoft SQL Server с использованием pyodbc и параметров драйвера:
params = urllib.parse.quote_plus(
"DRIVER={ODBC Driver 17 for SQL Server};"
"SERVER=localhost;"
"DATABASE=testdb;"
"UID=user;"
"PWD=pass"
)
engine = create_engine(f"mssql+pyodbc:///?odbc_connect={params}")# Установлено подключение через ODBC с заданными параметрами строки.
питон sqlalchemy.create_engine function comments
- питон sqlalchemy.create engine - аргументы и возвращаемое значение
- Функция python sqlalchemy.create_engine - описание
- sqlalchemy.create engine - примеры
- sqlalchemy.create engine - похожие методы на python
- sqlalchemy.create_engine на php, c#, sql, java
- sqlalchemy.create engine изменения python
- Примеры sqlalchemy.create_engine на питон