python – sqlalchemy数据库表已被锁定

前端之家收集整理的这篇文章主要介绍了python – sqlalchemy数据库表已被锁定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图从sqlalchemy的sqlite db中选择所有记录,遍历每个记录并对其进行更新.我这样做是因为我需要在我的名字栏中重新格式化记录.

这是我用来做一个简单测试的代码

@H_404_7@ def loadDb(name): sqlite3.connect(name) engine = create_engine('sqlite:///'+dbPath(),echo=False) Metadata = MetaData(bind=engine) return Metadata db = database("dealers.db") Metadata = db.loadDb() dealers = Table('dealers',Metadata,autoload=True) dealer = dealers.select().order_by(asc(dealers.c.id)).execute() for d in dealer: u = dealers.update(dealers.c.id==d.id) u.execute(name="hi") break

我收到错误

@H_404_7@sqlalchemy.exc.OperationalError: (OperationalError) database table is locked u'UPDATE dealers SET name=? WHERE dealers.id = ?' ('hi',1)

我对sqlalchemy很新,我不确定这个错误是什么意思或者如何修复它.这似乎应该是一个非常简单的任务,所以我知道我做错了什么.

最佳答案
使用sqlite,在执行select时无法更新数据库.您需要强制select查询完成并存储所有数据,然后执行循环.我认为这样做(未经测试):

@H_404_7@dealer = list(dealers.select().order_by(asc(dealers.c.id)).execute())

另一个选择是制作一个稍微复杂的sql语句,以便循环在数据库内而不是在Python中执行.这肯定会给你带来很大的性能提升.

猜你在找的Python相关文章