Python SQLite: 数据库被锁定
我正在尝试这段代码:
import sqlite
connection = sqlite.connect('cache.db')
cur = connection.cursor()
cur.execute('''create table item
(id integer primary key, itemno text unique,
scancode text, descr text, price real)''')
connection.commit()
cur.close()
我遇到了这个异常:
Traceback (most recent call last):
File "cache_storage.py", line 7, in <module>
scancode text, descr text, price real)''')
File "/usr/lib/python2.6/dist-packages/sqlite/main.py", line 237, in execute
self.con._begin()
File "/usr/lib/python2.6/dist-packages/sqlite/main.py", line 503, in _begin
self.db.execute("BEGIN")
_sqlite.OperationalError: database is locked
cache.db的权限设置是正确的。有什么建议吗?
23 个回答
61
在你的连接调用中设置超时时间参数,像这样:
connection = sqlite.connect('cache.db', timeout=10)
65
我猜你实际上是在使用sqlite3,尽管你的代码上写的不是。这里有一些需要检查的地方:
- 确认没有进程在占用这个文件(在Unix系统上,可以用命令
$ fuser cache.db
来检查,如果没有任何输出就说明没问题)。 - 检查目录里是否有一个叫cache.db-journal的文件;如果有,说明之前的会话崩溃了,没有被正确清理。
- 让数据库自己检查一下:可以用命令
$ sqlite3 cache.db "pragma integrity_check;"
。 - 备份一下数据库:用命令
$ sqlite3 cache.db ".backup cache.db.bak"
。 - 如果你只是学习,可能里面没有什么内容,可以删除cache.db,然后再试试你的代码。
- 看看备份是否有效:用命令
$ sqlite3 cache.db.bak ".schema"
。
如果这些都不行,可以看看 可能出现的问题 和 如何损坏你的数据库文件。
13
原来问题出在数据库文件的路径其实是一个通过samba挂载的目录。我把它移动到其他地方,这样就正常工作了。