将Update放入for循环时,Sqlalchemy提供数据库锁定错误

时间:2019-05-31 22:20:18

标签: python-3.x sqlite sqlalchemy

有2个表A和B。它们都有名为master和slave的列。表A的主值必须更新为表B的主值(对于表A和表B中具有相同从值的行)。

由于Sqlite没有join方法,并且不支持多表更新,因此我不得不考虑其他选项。

以下代码有效。


tableB = Table('table_B', metadata, autoload=True)
tableA = Table('table_A', metadata, autoload=True)


ku = tableA.update().where(tableA.c.master == "All for One" ).values(master = "Shigaraki Tomura")
ku.execute()

但是当我尝试在.values()中使用不同的值时,事情会变得混乱

ls = select(columns=[tableA.c.master,tableB.c.master], whereclause=tableA.c.slave == tableB.c.slave).distinct()
rows = ls.execute()

for i,j in rows:
    ku = tableA.update().where(tableA.c.master == i).values(master = j)
    ku.execute()

以下是错误消息

    File "/home/ehaacls/miniconda/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 505, in do_commit
        dbapi_connection.commit()
    sqlite3.OperationalError: database is locked

    raise exc.ResourceClosedError("This Connection is closed")
    sqlalchemy.exc.ResourceClosedError: This Connection is closed

0 个答案:

没有答案