python-3.x - Sqlalchemy 在将更新放入 for 循环时给出数据库锁定错误
问题描述
有 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
解决方案
推荐阅读
- cypress - 如何使用赛普拉斯检查标头中的脚本?
- python - 你能从字符串中间大小不同的输入中挑选出一块吗?
- python - Python - 如何将 GridSearchCV 变量用作字符串
- javascript - 是否可以像使用 graphql 查询一样仅查询 DataStore 查询中的某些字段?
- debugging - VSCode 调试:访问 chrome 已经打开的 tabs-urls
- javascript - 客户端文件未正确导入 discordjs
- c# - 具有 Linq 和默认值的多个左连接
- rest - 如何在docker上的pyspark中提交一个rest api jar
- python - Django 模板标签 all() 和 count() 不起作用我该怎么办
- java - Java JPA 类型查询