0

MySQL Connector/Python を使用して、2 秒ごとに値の変更をチェックし続けるループがあります。すべての肉を除いたループは次のとおりです (プリントはテスト目的でそこにあります:

try:
   while True:
       request = database.get_row(table="states", wherecol="state", whereval="request_from_interface")[0]
       print(request.value)
       time.sleep(2)
except KeyboardInterrupt:
   pass
# back to normal operation

get_row は単純な選択クエリであり、namedtuple fetchall を返します (したがって、末尾の [0] は 1 行のみになります)。

問題は、初期値を取得すると、変更してもその値を返し続けることです。たとえば、開始が「0」の場合、管理者に移動して変更しても、新しいターミナルを開いて変更してコミットしても、「0」を出力し続けます。query_cache_size を 0 に設定しようとしましたが、まだうまくいきません。コミットの問題だと思っていましたが、そうでもありませんでした。変更して再接続すると、変更が表示されますが、プログラム中に変更されない理由がわかりません。何かご意見は?

編集:それが発生した場合に備えて、はい、カーソルを閉じて、呼び出しごとに新しいカーソルを取得しています。

4

1 に答える 1

0

InnoDBのデフォルトの分離レベルREPEATABLE READです。これは、後続の一貫性のあるSELECTステートメントが、トランザクション内の最初のステートメントによって確立された同じスナップショットを読み取ることを意味します。カーソルを開いたり閉じたりしていますが、おそらくトランザクション内でそれを行っているため、確立されたスナップショットを何度も読み込んでいます。スナップショットの作成後にコミットされた値を読み取ることができるように、現在のトランザクションを終了するかROLLBACK、または終了します。COMMIT

于 2016-09-18T21:33:49.313 に答える