MYSQL veritabanında Kilidi Ignore:aşağıdaki hatayı alıyorum MySQL veritabanını sorgulamak için SQLAlchemy kullanma 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')
Birincisi, hata mesajı comment "Bir session.no_autoflush bloğunu kullanmayı düşünün varsayalım eğer bu floş vaktinde meydana geliyorsa, mevcut sorgum için kullanacağım seansı değil, kilidin yerleştirildiği diğer oturum hakkında mı? Bu tavsiyeyi izlediysem, bu genel olarak veritabanındaki kilitleri önlemeye yardımcı olur mu? İkincisi, sadece okumaya ve sorgu sonuçlarına değişiklik yazmam gerekmiyor, bu yüzden kilidin nasıl göz ardı edileceğini ve sadece veritabanında ne olduğunu okumayı öğrenmek istiyorum. SQL'in NOWAIT olduğuna inanıyorum, ancak bunu sqlalchemy API'sinde nasıl yapacağımı göremiyorum.
Lütfen SQL deyimlerini (her iki bağlantıda) ve 'CREATE TABLE' komutunu ve 'ENGLISH = InnoDB STATUS' (lütfen sorun oluştuğunda) verin. Sağladığınızdan, neden kilitlendiğini ve bir çok önemli ayrıntıyı anlatamayız. –
Ayrıca sqlalchemy'nin "no_autoflush" hakkında bilgi sağlayın; MySQL yapısının kapakların altında olduğunu anlamaya ihtiyacımız var. –
@RickJames hiçbir SQL [autoflush] alt yapısı oluşturmaz (http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.params.autoflush). SQLAlchemy oturumunun durumu nasıl ele aldığıdır. Oturumda beklemede olan değişiklikler DB'ye henüz eklenmemişse (ekler, güncelleştirmeler, silmeler), autoflush kullanımdaysa, sonraki sorgulamadan önce bunları DB'ye aktarabilir. Bir mcve olmadan OP yardımcı olamaz, bir şey kilitli bir şey kilitleme ve bir sorgu kilitli bir şey kullanmadan önce verilir ... –