fetchall
クエリ結果を新しい SQLite テーブルに挿入するためにPython の方法を使用することは避けたいと思いfetchone
ますfetchmany
。ただし、カーソルを使用してクエリをループしようとすると、挿入は 1 回のパス内でのみ発生します (この場合、すべてではなく事前定義された 1000 行のみが挿入されます)。ただし、ループ結果を空のリストに追加すると、すべての行が追加されるため、ループ自体が問題であるかのようにはなりません。
次のスクリプトは機能しません。
def fetchsome(cursor, some=1000):
fetch = cursor.fetchmany
while True:
rows = fetch(some)
if not rows: break
for row in rows:
cursor.execute("insert into zip4_upd values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", row)
conn.commit()
cur = conn.cursor()
cur.execute("""select * from zip4 left outer join alias on zip4.primarykey = alias.primarykey left outer join detail on zip4.citystatekey = detail.detail_citystatekey""")
fetchsome(cur)