【发布时间】:2014-03-06 19:17:55
【问题描述】:
我有时会运行同时访问同一个数据库的 python 脚本。这通常会导致数据库锁定错误。我希望脚本尽快重试,因为数据库永远不会长时间锁定。
有没有比在while 循环中使用try except 更好的方法,这种方法有什么问题吗?
【问题讨论】:
-
对我来说似乎完全合理...当然,如果您正在做需要并发访问的东西,那么您当然应该考虑与 sqlite3 不同的东西...
我有时会运行同时访问同一个数据库的 python 脚本。这通常会导致数据库锁定错误。我希望脚本尽快重试,因为数据库永远不会长时间锁定。
有没有比在while 循环中使用try except 更好的方法,这种方法有什么问题吗?
【问题讨论】:
在对connect function 的调用中增加timeout 参数:
db = sqlite3.connect("myfile.db", timeout = 20)
【讨论】:
如果您正在寻找并发性,SQlite 不是答案。当需要并发时,引擎性能不佳,尤其是在从不同线程写入时,即使表不相同。 如果您的脚本正在访问不同的表,并且它们在数据库级别没有关系(即声明的 FK),您可以将它们分隔在不同的数据库中,然后您的并发问题将得到解决。 如果它们已链接,但您可以在应用程序级别(脚本)中链接它们,您也可以将它们分开。 在这些情况下,最佳实践是使用事件实现锁定机制,但老实说,我不知道如何在 phyton 中实现。
【讨论】: