使用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
相关产品推荐
相关产品推荐

