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

使用aiosqlite时,循环查询期间能否修改SQLite3数据库?

问题解答

能否在循环读取期间修改数据库?

可以。SQLite支持多连接操作,aiosqlite作为异步封装,在循环读的同时执行写操作是可行的——SQLite会通过锁机制处理读写并发(写操作会短暂锁定数据库,读操作会等待锁释放后执行),不会导致冲突(只要业务逻辑本身没有并发修改同一数据的冲突)。

为什么修改代码执行后数据库无变化?

你的修改代码遗漏了事务提交步骤。aiosqlite默认会自动开启事务,所有写操作(比如UPDATE)都在事务中执行,如果不主动提交,当连接关闭时事务会自动回滚,导致修改不会持久化到数据库。

修正后的修改代码

db = await aiosqlite.connect("/main.db")

timing = await db.execute_fetchall("SELECT delete_time FROM auction WHERE id = ?", (id,))
print("from db", timing[0][0])

timing = float(timing[0][0]) + 60
print("edited", timing)

await db.execute("UPDATE auction SET delete_time = ? WHERE id = ?", (timing, id,))
await db.commit()  # 新增提交事务的步骤
await db.close()

额外注意事项

  • 循环中的数据库连接:你当前的循环代码保持了一个长期打开的db连接,这没问题,但要确保在程序退出时正确关闭连接,避免资源泄漏。
  • 并发读写的锁:如果写操作频繁,读操作可能会短暂等待锁释放,这是SQLite的正常行为,aiosqlite会以异步方式处理等待,不会阻塞事件循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:20:41