Метод dispose
Метод dispose класса Pool закрывает
все соединения, находящиеся в пуле, и помечает
пул как закрытый. После вызова этого метода пул
больше не может выдавать соединения, а все
освобожденные соединения будут закрыты, а не
возвращены обратно в пул. Параметров метод не
принимает.
Синтаксис
pool.dispose()
Пример
Давайте создадим движок SQLite в памяти и
посмотрим на состояние пула до и после вызова
метода dispose:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
pool = engine.pool
print(pool.status())
pool.dispose()
print(pool.status())
Результат выполнения кода:
"Pool size: 5 Connections in pool: 0 Current Overflow: -4 Current Checked out connections: 0"
"Pool size: 5 Connections in pool: 0 Current Overflow: -4 Current Checked out connections: 0"
Пример
Давайте откроем соединение, вернем его в пул,
а затем вызовем dispose и убедимся, что
пул закрыт:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
pool = engine.pool
with engine.connect() as conn:
conn.execute(text('SELECT 1'))
print('before dispose:', pool.status())
pool.dispose()
print('after dispose:', pool.status())
try:
with engine.connect() as conn:
conn.execute(text('SELECT 1'))
except Exception as e:
print('error:', type(e).__name__)
Результат выполнения кода:
"before dispose: Pool size: 5 Connections in pool: 1 Current Overflow: -4 Current Checked out connections: 0"
"after dispose: Pool size: 5 Connections in pool: 0 Current Overflow: -4 Current Checked out connections: 0"
"error: ResourceClosedError"
Пример
Давайте используем dispose для корректного
завершения работы приложения после выполнения
запросов:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'))
conn.execute(text("INSERT INTO articles (title) VALUES ('article 1')"))
conn.commit()
with engine.connect() as conn:
res = conn.execute(text('SELECT title FROM articles')).fetchall()
print(res)
engine.dispose()
print('disposed')
Результат выполнения кода:
[('article 1',)]
"disposed"