РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
93 of 711 menu

Класс 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить