我正在尝试这段代码:
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 的权限是可以的。有任何想法吗?
我假设您实际上正在使用 sqlite3,即使您的代码另有说明。以下是一些需要检查的事项:
- 文件上没有挂起的进程(unix:
$ fuser cache.db
应该什么也不说)
- 有cache.db的目录下没有cache.db-journal文件;这表明会话已崩溃且尚未正确清理。
- 要求数据库 shell 检查自身:
$ sqlite3 cache.db "pragma integrity_check;"
- 备份数据库
$ sqlite3 cache.db ".backup cache.db.bak"
- 删除cache.db,因为你可能里面什么都没有(如果你刚刚学习),然后重试你的代码
- 查看备份是否有效
$ sqlite3 cache.db.bak ".schema"
如果失败,请阅读可能出错的事情 http://www.sqlite.org/atomiccommit.html#sect_9_0 and 如何损坏数据库文件 http://www.sqlite.org/lockingv3.html#how_to_corrupt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)