Атрибут pool класса Engine
Атрибут pool класса Engine возвращает объект пула соединений,
который движок использует для управления подключениями к базе данных.
Пул хранит открытые соединения и выдает их по запросу, что позволяет
избежать постоянного переоткрытия соединений при каждом запросе.
Атрибут доступен только для чтения и не принимает параметров.
Синтаксис
engine.pool
Пример
Давайте создадим движок и выведем объект пула соединений:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print(engine.pool)
Результат выполнения кода:
"<sqlalchemy.pool.impl.SingletonThreadPool object at 0x...>"
Пример
Давайте посмотрим на состояние пула до и после открытия соединения:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
print(engine.pool.status())
with engine.connect() as conn:
conn.execute(text('SELECT 1'))
print(engine.pool.status())
Результат выполнения кода:
"Pool size: 0 Connections in pool: 0 Current Overflow: -1 Current Checked out connections: 0"
"Pool size: 0 Connections in pool: 0 Current Overflow: 0 Current Checked out connections: 1"
Пример
Давайте настроим пул с помощью параметров pool_size и max_overflow
и посмотрим на его работу:
from sqlalchemy import create_engine, text
engine = create_engine(
'sqlite:///:memory:',
pool_size=5,
max_overflow=10,
)
print(engine.pool.status())
with engine.connect() as conn:
conn.execute(text('SELECT 1'))
print(engine.pool.status())
Результат выполнения кода:
"Pool size: 5 Connections in pool: 0 Current Overflow: -5 Current Checked out connections: 0"
"Pool size: 5 Connections in pool: 0 Current Overflow: -4 Current Checked out connections: 1"
Пример
Давайте используем пул типа StaticPool, который переиспользует
единственное соединение:
from sqlalchemy import create_engine, text
from sqlalchemy.pool import StaticPool
engine = create_engine(
'sqlite:///:memory:',
poolclass=StaticPool,
)
print(engine.pool)
with engine.connect() as conn:
conn.execute(text('SELECT 1'))
print(engine.pool.status())
Результат выполнения кода:
"<sqlalchemy.pool.impl.StaticPool object at 0x...>"
"Pool size: 1 Connections in pool: 1 Current Overflow: 0 Current Checked out connections: 0"