Класс StaticPool
Класс StaticPool создает пул соединений,
который поддерживает только одно соединение
и переиспользует его для всех обращений к базе
данных. Это полезно для баз данных в памяти,
таких как SQLite с URL sqlite:///:memory:,
где каждое новое соединение создает отдельную
базу. Параметр creator задает функцию
создания соединения, а pool_size
ограничивает размер пула.
Синтаксис
StaticPool(creator, [pool_size])
Пример
Давайте создадим движок с пулом StaticPool
для базы SQLite в памяти:
from sqlalchemy import create_engine
from sqlalchemy.pool import StaticPool
engine = create_engine(
'sqlite:///:memory:',
poolclass=StaticPool
)
print(engine.pool)
Результат выполнения кода:
"<StaticPool ...>"
Пример
Давайте убедимся, что все соединения используют одно и то же подключение:
from sqlalchemy import create_engine, text
from sqlalchemy.pool import StaticPool
engine = create_engine(
'sqlite:///:memory:',
poolclass=StaticPool
)
with engine.connect() as conn1:
conn1.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'))
conn1.execute(text("INSERT INTO articles (title) VALUES ('article')"))
conn1.commit()
with engine.connect() as conn2:
res = conn2.execute(text('SELECT title FROM articles')).fetchall()
print(res)
Результат выполнения кода:
[('article',)]
Пример
Давайте сравним поведение с пулом по умолчанию
QueuePool, где данные из памяти теряются:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn1:
conn1.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'))
conn1.execute(text("INSERT INTO articles (title) VALUES ('article')"))
conn1.commit()
with engine.connect() as conn2:
try:
res = conn2.execute(text('SELECT title FROM articles')).fetchall()
print(res)
except Exception as e:
print('Error:', type(e).__name__)
Результат выполнения кода:
"Error: OperationalError"
Смотрите также
-
класс
QueuePool,
который представляет стандартный пул соединений -
класс
NullPool,
который отключает пулирование соединений -
функцию
create_engine,
которая создает движок с указанным пулом -
функцию
create_pool_from_url,
которая создает пул из строки URL