使用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,在某些查詢正在使用鎖定的某些內容之前,某事正在鎖定某些內容併發出刷新... –