我正在使用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状态检查,此表中的所有行都被锁定。其他db会话无法访问表中的任何行,并获得超时错误。
为什么在sqlalchemy中使用with_lockmode时没有找到记录,整个表都被锁定了?
答案 0 :(得分:2)
确定。我弄清楚,在表格的键列上添加索引将解决问题。