Я запросил две базы данных, чтобы получить два отношения. Перебирайте эти отношения один раз, чтобы сформировать карты, а затем снова выполните некоторые вычисления. Однако, когда я пытаюсь повторить эти же отношения во второй раз, я обнаружил, что никакой итерации на самом деле не происходит. Вот код:Итерация по таблице несколько раз Python SQLAlchemy
dev_connect = dev_engine.connect()
prod_connect = prod_engine.connect() # from a different database
Relation1 = dev_engine.execute(sqlquery1)
Relation2 = prod_engine.execute(sqlquery)
before_map = {}
after_map = {}
for row in Relation1:
before_map[row['instrument_id']] = row
for row2 in Relation2:
after_map[row2['instrument_id']] = row2
update_count = insert_count = delete_count = 0
change_list = []
count =0
for prod_row in Relation2:
count += 1
result = list(prod_row)
...
change_list.append(result)
count2 = 0
for before_row in Relation1:
count2 += 1
result = before_row
...
print count, count2 # prints 0
before_map
и after_map
не пусты, поэтому Relation1
и Relation2
определенно кортежи в них. Тем не менее count
и count2
равны 0, поэтому prod_row
и before_row
'для петель' фактически не встречаются. Почему я не могу перебрать более Relation1
и Relation2
во второй раз?
Невозможно повторно открыть курсор? –
@JeremyFisher - Насколько я знаю, SQL Alchemy/DBAPI не предлагает поддержку [прокручиваемых курсоров] (https://en.wikipedia.org/wiki/Cursor_%28databases%29#Scrollable_cursors), поэтому курсор вы вернуться назад - это дело «раз-и-забыть». – birryree