Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tente novamente no impasse para MySQL/SQLAlchemy


Você realmente não pode fazer isso com a Session de fora. Session teria que suportar isso internamente. Isso envolveria economizar muito estado privado, então isso pode não valer o seu tempo.

Eu abandonei completamente a maioria das coisas ORM em favor da interface SQLAlchemy Core de nível inferior. Usando isso (ou mesmo qualquer interface dbapi), você pode usar trivialmente seu retry_on_deadlock_decorator decorador (veja a pergunta acima) para fazer um db.execute com reconhecimento de tentativas embrulho.
 @retry_on_deadlock_decorator
 def deadlock_safe_execute(db, stmt, *args, **kw):
     return db.execute(stmt, *args, **kw)

E em vez de
 db.execute("UPDATE users SET active=0")

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

que tentará novamente automaticamente se ocorrer um impasse.