다른 서버에서 다른 데이터베이스에 하나 개의 서버에 하나의 데이터베이스에서 데이터를 이동하는 일부 파이썬 코드 :몇 가지 더 많은 요소를 가지고, 무언가를, 반복 가능에서 몇 가지 요소를 가지고 등
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