python - Sqlalchemy 刷新和提交 ORM 对象和 mysql 元数据锁
问题描述
当我在没有提交或刷新的情况下查询 ORM 对象,然后尝试截断我metadata lock
在 DB 中获取的表时。
我假设session.query(OBJ).all()
它是一个 DQL 命令并且SELECT
只有在事务正在进行时才具有共享锁,并且问题似乎我误解了这个问题的根本原因(现在我认为我正在使用 select 语句开始共享锁,直到我提交我的更改我会遇到这个问题)。
我做了什么来检查它是如何工作的:
s = sessionmaker(bind=engine, autocommit=Fasle, autoflush=False)
session = s()
session.query(OBJECT).all()
time.sleep(100)
在我运行的第二个终端中:
s = sessionmaker(bind=engine, autocommit=Fasle, autoflush=False)
session = s()
session.execute('TRUNCATE table OBJECT.__tablename__')
session.commit()
我Waiting for table metadata lock
在我的进程列表中看到。有人可以指出我正确的方向或解释为什么这种选择需要提交吗?
解决方案
语句中,s = sessionmaker(bind=engine, autocommit=Fasle, autoflush=False),误为autocommit=Fasle。使其自动提交=假。否则,我看不到任何其他错误。你能分享错误吗?
推荐阅读
- python - 如何在主机 Docker Windows 上本地保存文件
- html - Jinja 模板继承但不能在其他文件上修改它
- liquibase - generateChangeLog 不导出 databasechangelog 表
- javascript - 无法连接到 Firebase 实时数据库 (Node.js)
- java - 使用 Spring Boot 时出现 400 错误请求
- ios - 哪款 iPad 可以与最新的 Xcode 一起用于 iOS 开发?
- python - 有没有办法让 .exe 文件在 Windows 10 PC 启动/启动时自动启动,仅在 CMD/终端中?
- salesforce - 如何在 Demandware(sfcc) 中明智地从类别 API 中删除产品?
- c - OpenMP 并行化未按预期执行
- wordpress - 在 WordPress 中创建一个单独的登录页面