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

Метод freeze класса Result

Метод freeze класса Result фиксирует результат выполнения запроса и возвращает новый объект Result, который можно многократно перебирать. По умолчанию объект Result является однопроходным: после того как строки были извлечены, повторный перебор невозможен. Метод freeze решает эту проблему, позволяя обращаться к данным повторно.

Параметров метод не принимает. Он возвращает новый объект Result, который поддерживает многократную итерацию.

Синтаксис

Result.freeze()

Пример

Давайте выполним запрос и попробуем перебрать результат дважды без фиксации:

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles VALUES (2, 'article 2')")) conn.commit() res = conn.execute(text('SELECT * FROM articles')) print(list(res)) print(list(res))

Результат выполнения кода:

[(1, 'article 1'), (2, 'article 2')] []

Второй перебор вернул пустой список, потому что результат уже был исчерпан.

Пример

Теперь применим метод freeze, чтобы зафиксировать результат и перебрать его несколько раз:

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles VALUES (2, 'article 2')")) conn.commit() res = conn.execute(text('SELECT * FROM articles')).freeze() print(list(res)) print(list(res))

Результат выполнения кода:

[(1, 'article 1'), (2, 'article 2')] [(1, 'article 1'), (2, 'article 2')]

Теперь результат можно перебирать повторно без повторного выполнения запроса.

Пример

Давайте зафиксируем результат и воспользуемся методами first и all на одном и том же объекте:

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles VALUES (2, 'article 2')")) conn.commit() res = conn.execute(text('SELECT * FROM articles')).freeze() print(res.first()) print(res.all()) print(res.first())

Результат выполнения кода:

(1, 'article 1') [(1, 'article 1'), (2, 'article 2')] (1, 'article 1')

Смотрите также

  • класс Result,
    который представляет результат выполнения запроса
  • метод all,
    который возвращает все строки результата
  • метод first,
    который возвращает первую строку результата
  • метод close,
    который закрывает результат и освобождает ресурсы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить