尝试简单地更新数据库中的现有行(在web2py上运行), 但总是得到数据库锁定错误..
错误讯息:
<class 'sqlite3.OperationalError'> database is locked
我的设置
我创建数据库,它在使用数据库管理时可以工作(可以使用Web界面插入,更新)
db.define_table('mytest',Field('name','string'))
我已经使用网络界面向mytest添加了1行(所以它不是空的)
我有简单的代码来获取第一项并尝试更新该值,在那里它失败(我打开页面是浏览器,它给出了内部错误,带有错误日志的链接)
def index():
# connect
db = DAL('sqlite://storage.sqlite',pool_size=10,auto_import=True)
# get first record
record = db(db.mytest).select().first()
# try to update it.. database locked error here
record.update_record(name="asdfg")
# just in case needed?
db.commit()
db.close()
return "test"
软件
到目前为止我尝试了什么
错误日志:http://pastebin.com/2WMWypt6
当前的解决方法: - 创建新的应用程序,完全相同的代码似乎在那里工作
来自@GauravVichare的解决方案是 - 从控制器中删除此行(已在db.py中定义)
db = DAL('sqlite://storage.sqlite',pool_size=10,auto_import=True)
答案 0 :(得分:1)
检查您的计算机上是否打开了其他连接(对sqlite db),如果web2py shell已打开,请将其关闭。
检查DAL仅定义一次或不定义。仅在models/db.py
中定义DAL,无需在控制器中再次定义它。
模型中定义的每个变量在控制器中都可见。
您必须在DAL
中定义models/db.py
,并且您在控制器中再次定义,因此您为SQLite db
打开了两个连接。这就是为什么你会收到错误&#39; database is locked
&#39;。
答案 1 :(得分:0)
尝试使用myRecord
代替Record
,因为它可能是保留字
我知道User
在web2py中给了人们一些问题。我倾向于远离非常通用的别名。
否则,db中是否有任何内容?如果它是空的,你会收到并且错误 可能更好:
myRecord = record = db(db.mytest).select().first()
if myRecord:
myRecord.update_record(name="asdfg")
else:
[insert statement here]
答案 2 :(得分:0)
我的建议是
1.首先,当你做一些改变时保存代码。
2.Aftr save u r new code尝试重新加载web2py.exe 然后运行web2py,这样你就不会收到Databaselocked错误。
3.之前不要在Sqlite数据库中创建表。
4.开始运行web2py并启动服务器,当你在表单中输入数据时,它会自动创建tablesin sqlite数据库。