我想避免使用 Python 的方法将查询结果插入到新的 SQLite 表中,因为我遇到了使用或fetchall
可能会避免的内存问题。但是,当我尝试使用游标遍历查询时,插入只发生在一次传递中(在这种情况下,只插入预定义的 1000 行而不是全部)。但是,将循环结果附加到一个空列表中会导致所有行都被附加,因此问题并不是循环本身。fetchone
fetchmany
以下脚本不起作用:
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)