处理'the database is locked'错误的正确且最佳方法与twisted.enterprise.adbapi

2 投票
1 回答
520 浏览
提问于 2025-04-18 05:13

我正在使用 twisted.enterprise.adbapi 和 sqlite3 数据库适配器,以及 "runInteraction()" 方法。

我一直遇到 "sqlite3.OperationalError : 数据库被锁定" 的错误。 我明白问题所在,多个线程试图访问数据库,而数据库已经被一个线程锁定了,所以就抛出了这个异常。我的问题是,使用 Twisted 的标准或正确方法是什么来处理这个问题?

我已经在这里找到一个答案: http://twistedmatrix.com/pipermail/twisted-python/2009-June/019848.html

但是,限制连接池为一个连接会不会让整个应用在长查询时变得很慢呢? 而且这并没有解决从两个应用访问数据库的问题。

你觉得有没有更好的办法?

祝好,Florian。

1 个回答

1

但是,把连接池限制为一个连接,会不会在长时间查询时拖慢整个应用的速度呢?

SQLite不允许同时连接;无论是来自同一个程序还是不同的程序,它都不允许。它在数据库中保持一个锁定标志,专门用来防止其他程序在一个程序还在使用数据库文件时访问这个文件。如果你有一个慢查询,它会阻塞其他连接,不管这些连接是来自同一个程序还是其他程序。

如果这个问题很严重,解决办法很简单,就是不要使用SQLite。

撰写回答