我正在使用 sqlalchemy 访问 MySQL(通过 Innodb)。我用于锁定的查询是:
create_engine('mysql+mysqldb://root:root@localhost/tmp_db')
db_session = scoped_session(sessionmaker(bind=engine))
db_session.query(Transaction).filter_by(key='abc').with_lockmode('update').first()
在表中没有找到 key = 'abc'。但是,整个事务表被此查询锁定。我检查了 show engine innodb status,这个表中的所有行都被锁定了。其他数据库会话无法访问表中的任何行,并出现超时错误。
在 sqlalchemy 中使用 with_lockmode 时,为什么整个表都被锁定,找不到记录?