You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环运行正常 执行SQLite插入语句后仅执行一次就停止

问题根因
  • 核心为SQLite游标资源冲突:你复用同一个数据库游标cur执行了两次操作,第一次执行SELECT查询top50表数据后,直接对游标返回的流式结果集做遍历。当循环内调用同一个cur执行INSERT语句时,SQLite会自动清空该游标上未读取完的上一次查询结果集,导致第一次插入完成后,循环找不到下一条待遍历数据,直接终止运行。
    你观察到的「注释SQL插入逻辑循环就能跑完所有数据」的现象,刚好对应这个原因:没有插入操作时,游标不会被新的SQL语句占用,结果集就能完整遍历。
修复方案

必改项

将SELECT查询的结果一次性全部读取到内存列表中,再进行遍历,修改对应代码段即可:

# 原代码
# fh = cur.execute('''SELECT id, title, year FROM top50''')
# rty = list()
# for row in fh:

# 修改后代码
rows = cur.execute('''SELECT id, title, year FROM top50''').fetchall()
rty = list()
for row in rows:

可选优化项

  1. 调整提交逻辑:可以将conn.commit()移到整个循环结束后执行,所有数据插入完成后一次性提交,能大幅提升执行效率;如果担心中途异常丢失数据,也可以设置每插入5-10条提交一次。
  2. 增加异常捕获:给插入操作加异常捕获逻辑,避免单条数据字段缺失、格式异常导致整个程序终止,示例如下:
try:
    cur.execute('''INSERT INTO Omdbdump (title, year, rated, released, runtime, genre, director, writer, actors, plotlong, language, country, awards, poster, imdbrating, rtrating, mcrating, imdbid, type, dvd, boxoffice, production, website) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )''', (title, year, rated, released, runtime, genre, director, writer, actors, plotlong, language, country, awards, poster, imdbrating, rtrating, mcrating, imdbid, type, dvd, boxoffice, production, website))
except Exception as e:
    print(f"插入《{title}》数据失败,错误信息:{e}")
    continue

内容的提问来源于stack exchange,提问作者Louis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:45:04