2016-05-28 4 views
0

私はPythonでMySQLデータベースのトランザクションをキューに入れるためにキューを使用しています。私はautocommit = Falseを使用しているので、すべてのデータクエリが正しく実行されないとトランザクションをロールバックできます。ワーカー・トランザクション内でdb.rollback()を実行する前に、dbの更新をチェックすることはできますか?

db.rollback()を実行する前に作業者がデータベースに対してアクションを実行したかどうかを確認することができるかどうかは疑問です。また、エラーが発生していないワーカーがデータベースに何もしていない場合でも、db.rollbackを実行できますか?

ありがとうございます!

答えて

2

は、それは、他に何も起こらなかったトランザクションをロールバックするないエラーです。どちらの場合には、MySQLConnection.in_transaction propertyをテストすることができます。

+0

これはまさに私が必要としていたものです。ありがとう! – chris

+0

'autocommit = false'で接続が初期化された場合は、すぐにトランザクションはありませんか? – EagleRainbow

0

あなたが発行するコマンドを送信し、(同じautocommit = falseように接続を提供します)

START TRANSACTION; 

ROLLBACK WORK; 

(参照もhttps://dev.mysql.com/doc/refman/5.5/en/commit.html

0 row(s) affected 
と リターン

これは、あなたがロールバックする可能性があることを意味しますk空のトランザクションを安全に(MySQL 5.1.49-3でテスト済み)

また、ワーカーには常にローカル/スタティック変数を格納することができます。ローカル変数はfalseで初期化されます。ワーカーによって少なくとも1つの更新コマンドが発行されている場合は、この変数をtrueに設定します。

ROLLBACKにするかどうかを後で決める必要がある場合は、変数を参照してください。trueの場合、DBチャネル経由で少なくとも1つの更新コマンドを送信したことがわかります。それは、トランザクションが存在しない場合にロールバックしようとするエラーがあるが、私が正しく質問を理解している場合

関連する問題