Sqlite3与Python:处理锁定的数据库
我有时候会同时运行几个Python脚本,它们都要访问同一个数据库。这经常会导致数据库锁定错误。我希望脚本能尽快重试,因为数据库通常不会锁定太久。
有没有比在一个while
循环里用try
和except
的方式更好的方法?这种方法会有什么问题吗?
2 个回答
0
在你调用连接函数的时候,增加一下timeout
这个参数的数值:
db = sqlite3.connect("myfile.db", timeout = 20)
0
如果你想要处理并发(也就是同时进行多个操作),那么SQlite可能不是一个好的选择。因为这个数据库在需要并发时表现得不好,尤其是当不同的线程同时写入数据时,即使它们写入的表不一样也是如此。
如果你的脚本访问的是不同的表,并且这些表在数据库层面上没有关系(也就是说没有声明外键),你可以把它们分开到不同的数据库里,这样就能解决并发的问题。
如果这些表是有联系的,但你可以在应用层(脚本)中处理这些关系,那么你也可以把它们分开。
在这种情况下,最好的做法是实现一个带有事件的锁机制,但老实说,我对如何在Python中实现这个机制并不太了解。