Utilizzando SQLAlchemy per interrogare un database MySQL Sto ottenendo il seguente errore:Ignora blocco in MySQL database in SQLAlchemy Query
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')
In primo luogo, presumo che il commento messaggio di errore per "considerare l'utilizzo di un blocco session.no_autoflush se questo svuotamento si verifica prematuramente "riguarda l'altra sessione che blocca il blocco, non la sessione che sto utilizzando per la mia query corrente? Se ho seguito questo consiglio, questo aiuta a evitare i blocchi sul database in generale? In secondo luogo, ho solo bisogno di leggere e non ho bisogno di scrivere modifiche ai risultati della query, quindi vorrei sapere come ignorare il blocco e solo leggere ciò che è attualmente nel database. Credo che lo sql sia NOWAIT, ma non vedo come farlo nell'API sqlalchemy.
Fornire le istruzioni SQL coinvolte (su entrambe le connessioni) e 'SHOW CREATE TABLE' e' SHOW ENGINE = InnoDB STATUS; '(se possibile, quando si verifica il problema). Da quello che hai fornito, non possiamo dire perché è bloccato, né molti altri dettagli importanti. –
Fornire anche informazioni su "no_autoflush" di sqlalchemy; abbiamo bisogno di capire quale sia la costruzione di MySQL sotto le coperte. –
@RickJames no costrutti SQL sottostanti [autoflush] (http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.params.autoflush). È proprio come lo stato di SQLalchemy gestisce lo stato. Se la sessione ha modifiche in sospeso non ancora scaricate su DB (inserimenti, aggiornamenti, eliminazioni), queste verranno scaricate nel DB prima dell'esecuzione della query successiva, se è in uso l'autoflush. Tuttavia, non posso aiutare OP senza un mcve, qualcosa sta bloccando qualcosa e un flush emesso prima che alcune query stiano usando qualcosa bloccato ... –