Класс NullPool
Класс NullPool создает пул соединений, который
не хранит соединения после их закрытия. Каждый раз,
когда движку требуется соединение, создается новое
физическое соединение с базой данных. Как только
соединение закрывается, оно немедленно разрывается.
Этот пул полезен для тестирования, для работы с
базами данных, которые плохо переносят длительные
соединения, а также в многопроцессных приложениях,
где пул не должен разделяться между процессами.
Синтаксис
from sqlalchemy.pool import NullPool
pool = NullPool(creator, [reset_on_return])
Пример
Давайте создадим движок для базы SQLite
в памяти с пулом NullPool:
from sqlalchemy import create_engine, text
from sqlalchemy.pool import NullPool
engine = create_engine(
'sqlite:///:memory:',
poolclass=NullPool
)
with engine.connect() as conn:
res = conn.execute(text('SELECT 1'))
print(res.scalar())
Результат выполнения кода:
"1"
Пример
Давайте убедимся, что после закрытия соединения пул не хранит его и создает новое при следующем подключении:
from sqlalchemy import create_engine
from sqlalchemy.pool import NullPool
engine = create_engine(
'sqlite:///:memory:',
poolclass=NullPool
)
conn1 = engine.connect()
print(engine.pool.status())
conn1.close()
print(engine.pool.status())
conn2 = engine.connect()
print(engine.pool.status())
conn2.close()
Результат выполнения кода:
"Pool size: 0 Connections in pool: 0 Current Overflow: 0 Current Checked out connections: 0"
"Pool size: 0 Connections in pool: 0 Current Overflow: 0 Current Checked out connections: 0"
"Pool size: 0 Connections in pool: 0 Current Overflow: 0 Current Checked out connections: 0"
Пример
Давайте сравним поведение NullPool и
QueuePool при повторном подключении:
from sqlalchemy import create_engine
from sqlalchemy.pool import NullPool, QueuePool
engine_null = create_engine(
'sqlite:///:memory:',
poolclass=NullPool
)
conn = engine_null.connect()
conn.close()
print(engine_null.pool.status())
engine_queue = create_engine(
'sqlite:///:memory:',
poolclass=QueuePool
)
conn = engine_queue.connect()
conn.close()
print(engine_queue.pool.status())
Результат выполнения кода:
"Pool size: 0 Connections in pool: 0 Current Overflow: 0 Current Checked out connections: 0"
"Pool size: 5 Connections in pool: 1 Current Overflow: 0 Current Checked out connections: 0"
Смотрите также
-
функцию
create_engine,
которая создает движок базы данных -
класс
QueuePool,
который представляет пул соединений по умолчанию -
класс
StaticPool,
который хранит одно соединение для всех запросов -
функцию
create_pool_from_url,
которая создает пул из строки URL подключения