sqlalchemy を使用して (Innodb 経由で) MySQL にアクセスしています。ロックに使用するクエリは次のとおりです。
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 から確認したところ、このテーブルのすべての行がロックされています。他の db セッションは、テーブル内のどの行にもアクセスできず、タイムアウト エラーが発生します。
sqlalchemyでwith_lockmodeを使用すると、レコードが見つからないためにテーブル全体がロックされるのはなぜですか?