gpt4 book ai didi

python - sqlalchemy 数据库表被锁定

转载 作者:IT王子 更新时间:2023-10-29 06:29:07 41 4
gpt4 key购买 nike

我正在尝试从我使用 sqlalchemy 的 sqlite 数据库中选择所有记录,遍历每个记录并对其进行更新。我这样做是因为我需要重新格式化我的姓名列中的所有记录。

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

   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

我收到错误:

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

我是 sqlalchemy 的新手,我不确定这个错误是什么意思或如何修复它。这看起来应该是一项非常简单的任务,所以我知道我做错了什么。

最佳答案

使用 SQLite,您无法在仍在执行选择时更新数据库。您需要强制选择查询完成并存储所有数据,然后执行循环。我认为这可以完成工作(未经测试):

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

另一种选择是编写稍微复杂一些的 SQL 语句,以便循环在数据库内部执行,而不是在 Python 中执行。这肯定会给您带来巨大的性能提升。

关于python - sqlalchemy 数据库表被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3596801/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com