如何解决Sqlalchemy刷新并提交ORM对象和mysql元数据锁
当我查询没有提交或刷新的ORM对象,然后尝试截断表时,我在数据库中得到了metadata lock
。
我假设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,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错误。使它为autocommit = False。否则,我看不到任何其他错误。您可以分享错误吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。