下面是一些Python代碼從一個數據庫在一個服務器中,另一個服務器將數據移動到另一個數據庫:需要幾個元素從一個迭代,做一些事情,採取一些元素較多,等等
cursor1.execute("""
SELECT d1.Doc_Id , d2.Doc_Id
FROM Document d1
INNER JOIN Reference r ON d1.Doc_Id = r.Doc_Id
INNER JOIN Document d2 ON r.R9 = d2.T9
""")
cursor2.execute("START TRANSACTION")
cursor2.executemany("INSERT IGNORE INTO citation_t(citing_doc_id, cited_doc_id) VALUES (?,?)",
cursor1)
cursor2.execute("COMMIT")
現在,爲了便於說明,假設事務在提交之前耗盡了目標硬盤驅動器中的空間,並且因此提交會丟失。但我使用交易的性能原因,而不是原子性。所以,我想用填充的數據填充硬盤驅動器,以便它保持完整,並且可以將其展示給我的老闆。再次,這是爲了闡述,真正的問題在下面。在這種情況下,我寧願做:
cursor1.execute("""
SELECT d1.Doc_Id , d2.Doc_Id
FROM Document d1
INNER JOIN Reference r ON d1.Doc_Id = r.Doc_Id
INNER JOIN Document d2 ON r.R9 = d2.T9
""")
MAX_ELEMENTS_TO_MOVE_TOGETHER = 1000
dark_spawn = some_dark_magic_with_iterable(cursor1, MAX_ELEMENTS_TO_MOVE_TOGETHER)
for partial_iterable in dark_spawn:
cursor2.execute("START TRANSACTION")
cursor2.executemany("INSERT IGNORE INTO citation_t(citing_doc_id, cited_doc_id) VALUES (?,?)",
partial_iterable)
cursor2.execute("COMMIT")
我的問題是,這是在some_dark_magic_with_iterable
填充以正確的方式,也就是要建立某種形式的迭代器與在中間停頓?
你的意思是你想*批次*的結果嗎? –
@MartijnPieters是的,有點...... – dsign