Метод 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']
Пример
Давайте обработаем каждую часть результата отдельно, например, выведем количество строк в каждой части:
Результат выполнения кода: