Я работал над созданием сценария тестирования БД с использованием SQLAlchemy и pytest. Одним из тестов является построчное тестирование двух таблиц. Поскольку некоторые из рассматриваемых таблиц находятся в миллионах строк, я не могу просто использовать query (TableModel) .all (), так как он потребляет всю память.
Я пробовал обе с использованием yield
и yield_per()
, как показано ниже, но, похоже, не удалось найти правильный способ, позволяющий перебирать только несколько строк за раз:
def all_records(self):
query = self.session.query(self.model_cls).yield_per(1000)
return query
# yield query
Вот тест:
def test_val_match(session, source, target):
'''Verifies that the row values are the same in each table'''
for s, t in zip(source.all_records(), target.all_records()):
assert s == t
Оба эти результата приводят к использованию нескольких ГБ ОЗУ до тех пор, пока на машине не закончится память. Есть ли другой способ сделать это?