sql >> Databasteknik >  >> RDS >> Mysql

Försök igen på dödläge för MySQL / SQLAlchemy

Du kan inte riktigt göra det med Session från utsidan. Session skulle behöva stödja detta internt. Det skulle innebära att spara en hel del privat tillstånd, så det här kanske inte är värt din tid.

Jag lade helt bort de flesta ORM-grejer till förmån för SQLAlchemy Core-gränssnittet på lägre nivå. Genom att använda det (eller till och med vilket dbapi-gränssnitt som helst) kan du trivialt använda din retry_on_deadlock_decorator decorator (se frågan ovan) för att göra en försöksmedveten db.execute omslag.

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

Och istället för

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

du gör

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

som kommer att försöka igen automatiskt om ett dödläge inträffar.



  1. Aktivitets- och bakgrundstjänst Tillgång till SQLite-databasen

  2. Insamlingsmetod:COUNT-funktion i Oracle Database

  3. Lagring av redundanta främmande nycklar för att undvika anslutningar

  4. Så här ändrar du tabellvärdesparametern