为什么sqlalchemy with_lockmode会锁定整个表没有找到记录条件?

时间:2012-10-24 00:39:00

标签: mysql sqlalchemy innodb

我正在使用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时没有找到记录,整个表都被锁定了?

1 个答案:

答案 0 :(得分:2)

确定。我弄清楚,在表格的键列上添加索引将解决问题。