我有一個Python應用程序拋出標準sqlite3.OperationalError: database is locked
錯誤。我查看了互聯網,找不到任何可行的解決方案(請注意,沒有多進程/線程正在進行,正如您所看到的,我已嘗試提高超時參數)。 sqlite文件存儲在本地硬盤上。sqlite3.OperationalError:數據庫被鎖定 - 非線程應用程序
以下函數是訪問sqlite數據庫的許多函數之一,它在第一次調用時運行良好,但在第二次調用時會拋出上述錯誤(在另一個函數中調用for
循環的一部分功能):
def update_index(filepath):
path = get_setting('Local', 'web')
stat = os.stat(filepath)
modified = stat.st_mtime
index_file = get_setting('Local', 'index')
connection = sqlite3.connect(index_file, 30)
cursor = connection.cursor()
head, tail = os.path.split(filepath)
cursor.execute('UPDATE hwlive SET date=? WHERE path=? AND name=?;', (modified, head, tail))
connection.commit()
connection.close()
非常感謝。
數據庫在調用此函數之前應該完全關閉。如果我打算保持數據庫連接,那麼最好的方法是什麼?將'connection'實例存儲在函數的作用域之外,還是將其作爲參數傳遞? – 2010-04-04 13:14:58
這將是整潔,如果你犯了一個類,把處理中的類數據庫中的所有功能,有連接作爲類的成員屬性。你可以在'__init__'類中創建連接,並添加一個close_connection(具有明顯的內容)方法,當你完成時調用。否則,你可以搜索你的代碼,並添加調試語句,只要你打開和關閉與數據庫的連接,查看它們是否嵌套。 – tzot 2010-04-04 15:44:03