尝试从代码更新时,web2py数据库始终处于锁定状态

时间:2016-05-26 07:30:05

标签: python web2py

尝试简单地更新数据库中的现有行(在web2py上运行), 但总是得到数据库锁定错误..

错误讯息:

<class 'sqlite3.OperationalError'> database is locked

我的设置

    模型/ db.py中的
  • 我创建数据库,它在使用数据库管理时可以工作(可以使用Web界面插入,更新)

    db.define_table('mytest',Field('name','string'))

  • 我已经使用网络界面向mytest添加了1行(所以它不是空的)

  • 在控制器/ test.py中的
  • 我有简单的代码来获取第一项并尝试更新该值,在那里它失败(我打开页面是浏览器,它给出了内部错误,带有错误日志的链接)

    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"
    

软件

  • WinPython2.7
  • 使用Spyder ide
  • 手动运行win2py.py(2.14.6)
  • windows8的

到目前为止我尝试了什么

  • 不同的DAL设置,poolize,没有autoimport ..
  • 关闭所有web2py管理工具/标签
  • 创建新数据库
  • 重新启动web2py
  • 重新启动电脑

错误日志:http://pastebin.com/2WMWypt6

当前的解决方法: - 创建新的应用程序,完全相同的代码似乎在那里工作

来自@GauravVichare的

解决方案是   - 从控制器中删除此行(已在db.py中定义)

db = DAL('sqlite://storage.sqlite',pool_size=10,auto_import=True)

3 个答案:

答案 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数据库。