Soi*_*oid 46 python sqlite pysqlite
我正在尝试这段代码:
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()
Run Code Online (Sandbox Code Playgroud)
我抓住了这个例外:
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
Run Code Online (Sandbox Code Playgroud)
cache.db的权限没问题.有任何想法吗?
msw*_*msw 47
我假设您实际上正在使用sqlite3,即使您的代码另有说明.以下是一些要检查的事项:
$ fuser cache.db应该什么都不说)$ sqlite3 cache.db "pragma integrity_check;"$ sqlite3 cache.db ".backup cache.db.bak"$ sqlite3 cache.db.bak ".schema"如果做不到这一点,请阅读可能出错的事情以及如何破坏您的数据库文件
Ant*_*osa 39
在connect connect中设置timeout参数,如下所示:
connection = sqlite.connect('cache.db', timeout=10)
Run Code Online (Sandbox Code Playgroud)
小智 17
我知道这已经过时了,但我仍然遇到问题,这是谷歌的第一个链接.OP说他的问题是.db是坐在SMB的一部分,这正是我的情况.我的十分钟研究表明这是sqlite3和smb之间已知的冲突; 我发现错误报告可以追溯到2007年.
我通过在/ etc/fstab中的smb挂载行添加"nobrl"选项来解决它,所以该行现在看起来像这样:
//SERVER/share /mnt/point cifs credentials=/path/to/.creds,sec=ntlm,nobrl 0 0
Run Code Online (Sandbox Code Playgroud)
此选项可防止SMB客户端向服务器发送字节范围锁定.我对SMB协议的详细信息不太了解,但我最好能说这个设置在多用户环境中会引起关注,其他人可能会尝试写入与您相同的数据库.对于家庭设置,至少,我认为它足够安全.
我的相关版本:
Eri*_*n V 11
我的显示"锁定"消息的原因实际上是由于我在我的Mac上打开了一个SQLite3 IDE,这就是它被锁定的原因.我假设我正在IDE中使用数据库并且没有保存更改,因此放置了一个锁.
长话短说,检查数据库上没有未保存的更改,并且它没有在其他地方使用.
在Linux中,您可以执行类似的操作,例如,如果锁定的文件是development.db:
$ fuser development.db此命令将显示锁定文件的进程:
development.db:5430刚刚杀了进程......
kill -9 5430 ...你的数据库将被解锁.
小智 5
这是同时访问的巧妙解决方法:
while True:
connection = sqlite3.connect('user.db', timeout=1)
cursor = connection.cursor()
try:
cursor.execute("SELECT * FROM queue;")
result = cursor.fetchall()
except sqlite3.OperationalError:
print("database locked")
num_users = len(result)
# ...
Run Code Online (Sandbox Code Playgroud)
小智 5
因为这仍然是 Google 对此问题的首要关注,所以让我添加一个可能的原因。如果您正在编辑数据库结构并且尚未提交更改,则数据库将被锁定,直到您提交或还原。
(可能不常见,但我正在开发一个应用程序,因此代码和数据库都是同时开发的)
| 归档时间: |
|
| 查看次数: |
94518 次 |
| 最近记录: |