Метод close класса Result
Метод close класса Result закрывает результат
выполнения запроса и освобождает связанные с ним ресурсы,
такие как курсор базы данных. После вызова метода результат
считается закрытым, и попытка получить из него строки
приведет к исключению. Метод не принимает параметров
и не возвращает значения.
Закрытие результата особенно полезно при работе с большими
наборами данных, когда нужно как можно раньше освободить
ресурсы соединения. После закрытия атрибут closed
принимает значение True.
Синтаксис
Result.close()
Пример
Давайте выполним запрос и закроем результат методом
close:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
res = conn.execute(text('SELECT 1 AS num'))
print(res.closed)
res.close()
print(res.closed)
Результат выполнения кода:
False
True
Пример
Давайте создадим таблицу, наполним ее данными и закроем результат после выборки:
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, '
'text TEXT, '
'status TEXT, '
'num INTEGER)'
))
conn.execute(text(
"INSERT INTO articles (title, text, status, num) "
"VALUES ('article 1', 'text 1', 'published', 10)"
))
conn.execute(text(
"INSERT INTO articles (title, text, status, num) "
"VALUES ('article 2', 'text 2', 'draft', 20)"
))
res = conn.execute(text('SELECT title FROM articles'))
rows = res.fetchall()
print(rows)
res.close()
print(res.closed)
Результат выполнения кода:
[('article 1',), ('article 2',)]
True
Пример
Давайте попробуем получить строки из уже закрытого результата:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
res = conn.execute(text('SELECT 1 AS num'))
res.close()
try:
res.fetchone()
except Exception as e:
print(type(e).__name__)
Результат выполнения кода:
"ResourceClosedError"