Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bei Deadlock für MySQL/SQLAlchemy erneut versuchen

Mit der Session ist das nicht wirklich möglich von außen. Session müsste dies intern unterstützen. Es würde bedeuten, dass viel privater Zustand eingespart wird, also ist dies Ihre Zeit möglicherweise nicht wert.

Ich habe das meiste ORM-Zeug zugunsten der SQLAlchemy-Core-Schnittstelle der unteren Ebene vollständig aufgegeben. Mit dieser (oder sogar jeder anderen dbapi-Schnittstelle) können Sie ganz einfach Ihren retry_on_deadlock_decorator verwenden decorator (siehe obige Frage), um eine wiederholungsfähige db.execute zu erstellen Verpackung.

 @retry_on_deadlock_decorator
 def deadlock_safe_execute(db, stmt, *args, **kw):
     return db.execute(stmt, *args, **kw)

Und statt

 db.execute("UPDATE users SET active=0")

du tust

 deadlock_safe_execute(db, "UPDATE users SET active=0")

die es automatisch erneut versucht, wenn ein Deadlock auftritt.