Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Spróbuj ponownie w przypadku zakleszczenia dla MySQL/SQLAlchemy

Naprawdę nie możesz tego zrobić z Session z zewnątrz. Session musiałby wspierać to wewnętrznie. Wymagałoby to zaoszczędzenia dużej ilości prywatnego państwa, więc może to nie być warte twojego czasu.

Całkowicie porzuciłem większość rzeczy związanych z ORM-em na rzecz interfejsu SQLAlchemy Core niższego poziomu. Używając tego (lub nawet dowolnego interfejsu dbapi) możesz banalnie użyć swojego retry_on_deadlock_decorator dekorator (patrz pytanie powyżej), aby umożliwić ponowne próby db.execute opakowanie.

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

I zamiast

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

tak

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

który spróbuje automatycznie ponowić próbę, jeśli nastąpi zakleszczenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL, koalescencyjny odpowiednik pustych wartości?

  2. Wersjonowanie tabel (tabele historyczne) i Relacje tabel porządku

  3. PHP i MySQL opcjonalne warunki WHERE

  4. Wybierasz samodzielny serwer wyszukiwania pełnotekstowego:Sphinx czy SOLR?

  5. Warunek IF w skrypcie mysql