有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