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

このループで5秒ごとに更新されたオブジェクトカウントが表示されないのはなぜですか?

    Python DB APIは、デフォルトでAUTOCOMMIT =OFFモードであり、(少なくともMySQLdbの場合)REPEATABLEREAD分離レベルであるためです。これは、バックグラウンドで進行中のデータベーストランザクション(InnoDBはトランザクションエンジン)があり、特定の行(またはテーブルでさえも)への最初のアクセスがこのリソースの残りの部分の「ビュー」を修正することを意味しますトランザクション。

    この動作を防ぐには、現在のトランザクションを「更新」する必要があります。

      from django.db import transaction
    
    
      @transaction.autocommit  
      def my_count():     
          while True:
              transaction.commit()
              print "Number of Things: %d" % Thing.objects.count()
              time.sleep(5)
    

    --transaction.autocommitに注意してください デコレータは、トランザクション管理モードに入るためだけのものです(これは、transaction.enter_transaction_management / Leave_transaction_managemen関数を使用して手動で行うこともできます)。

    もう1つ、注意が必要ですが、Djangoの自動コミットは、データベースにある自動コミットとは異なり、完全に独立しています。しかし、これはこの質問の範囲外です。

    2012年1月22日に編集

    こちら 同様の質問に対する「双子の答え」です。




    1. INTと比較したBIGINTmysqlのパフォーマンス

    2. Microsoft OLE DB非推奨!ロングライブADO!

    3. MySQLからnパーセンタイルを選択します

    4. Wordpressはmysqlサーバーに接続できません