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

Метод partitions

Метод partitions класса Result возвращает итератор, который выдаёт части результата заданного размера. Первым параметром метод принимает целое число size - количество строк в одной части. Вторым необязательным параметром передаётся max_chunk_size - максимальный размер части для оптимизации буферизации. Метод удобен для пакетной обработки большого количества строк без загрузки всего результата в память.

Синтаксис

Result.partitions(size, [max_chunk_size])

Пример

Давайте создадим таблицу articles, заполним её строками и разобьём результат выборки на части по три строки:

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'), ('article 2'), " "('article 3'), ('article 4'), " "('article 5'), ('article 6'), " "('article 7')" )) conn.commit() res = conn.execute(text( 'SELECT id, title FROM articles ORDER BY id' )) for partition in res.partitions(3): print([row.title for row in partition])

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

['article 1', 'article 2', 'article 3'] ['article 4', 'article 5', 'article 6'] ['article 7']

Пример

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

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'), ('article 2'), " "('article 3'), ('article 4'), " "('article 5')" )) conn.commit() res = conn.execute(text( 'SELECT id, title FROM articles ORDER BY id' )) for partition in res.partitions(2, max_chunk_size=4): print([row.title for row in partition])

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

['article 1', 'article 2'] ['article 3', 'article 4'] ['article 5']

Пример

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

<+python+> 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'), ('article 2'), " "('article 3'), ('article 4'), " "('article 5'), ('article 6')" )) conn.commit() res = conn.execute(text( 'SELECT id, title FROM articles ORDER BY id' )) for partition in res.partitions(4): print(f'rows in partition: {len(partition)}') <-python+>

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

<+python+> "rows in partition: 4" "rows in partition: 2" <-python+>

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

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