使用SQLAlchemy的查询MySQL数据库,我收到以下错误:忽略锁定在MySQL数据库中的SQLAlchemy查询
sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (_mysql_exceptions.OperationalError) (1205, 'Lock wait timeout exceeded; try restarting transaction')
首先,我认为错误消息的评论“考虑使用session.no_autoflush块如果此刷新过早发生“是关于放置锁的其他会话,而不是我用于当前查询的会话?如果我遵循这个建议,这将有助于避免在数据库上锁定一般?其次,我只需要阅读并不需要对查询结果进行修改,所以我想知道如何忽略锁并只读数据库中的当前内容。我相信SQL是NOWAIT,但我没有看到在sqlalchemy API中如何做到这一点。
请提供所涉及的SQL语句(在两个连接上),以及'SHOW CREATE TABLE'和'SHOW ENGINE = InnoDB STATUS;'(如果可能,当问题发生时)。从你提供的内容来看,我们不能说出它为什么锁定,还有很多其他重要细节。 –
也提供有关sqlalchemy的“no_autoflush”的信息;我们需要弄清楚什么是MySQL构造。 –
@RickJames没有SQL构造underly [autoflush](http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.params.autoflush)。这正是SQLAlchemy会话处理状态的方式。如果会话有未挂起的更改尚未刷新到数据库(插入,更新,删除),则会在运行下一个查询(如果使用autoflush)之前将其刷新到数据库。但是,如果没有mcve,不能帮助OP,在某些查询正在使用锁定的某些内容之前,某事正在锁定某些内容并发出刷新... –