sql >> データベース >  >> RDS >> Mysql

MySQL/SQLAlchemyのデッドロックを再試行します

    Sessionでは実際にそれを行うことはできません 外部から。 Session これを内部でサポートする必要があります。それは多くの私的な状態を保存することを含むでしょう、それでこれはあなたの時間の価値がないかもしれません。

    私はほとんどのORMを完全に捨てて、低レベルのSQLAlchemyCoreインターフェイスを採用しました。それ(または任意のdbapiインターフェース)を使用すると、retry_on_deadlock_decoratorを簡単に使用できます。 再試行を意識したdb.executeを作成するためのデコレータ(上記の質問を参照) ラッパー。

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

    そして代わりに

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

    あなたは

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

    デッドロックが発生した場合は自動的に再試行します。



    1. mysql CONCAT()AS名?

    2. Oracleでテーブルを作成する方法

    3. INSERT INTO ... FROM SELECT ...RETURNINGidマッピング

    4. Java +MysqlUTF8の問題