sql >> Databáze >  >> RDS >> Mysql

Proč tato smyčka nezobrazuje aktualizovaný počet objektů každých pět sekund?

Protože Python DB API je standardně v režimu AUTOCOMMIT=OFF a (alespoň pro MySQLdb) na úrovni izolace REPEATABLE READ. To znamená, že v zákulisí máte probíhající databázovou transakci (InnoDB je transakční engine), ve které první přístup k danému řádku (nebo možná i tabulce, nejsem si jistý) opraví "pohled" na tento zdroj pro zbývající část transakce.

Abyste tomuto chování zabránili, musíte 'obnovit' aktuální transakci:

  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)

– všimněte si, že transaction.autocommit decorator je pouze pro vstup do režimu správy transakcí (to lze také provést ručně pomocí funkcítransakce.enter_transaction_management/leave_transaction_managemen).

Ještě jedna věc - abyste si byli vědomi - Djangoův autocommit není stejný autocommit, který máte v databázi - je zcela nezávislý. Ale to je mimo rozsah této otázky.

Upraveno 22. 1. 2012

Zde je „dvojitá odpověď“ na podobnou otázku.




  1. Jak správně indexovat propojovací tabulku pro připojení many-to-many v MySQL?

  2. Řádek SQL oddělený čárkami s klauzulí Seskupit podle

  3. Lze MySQL bez problémů nahradit MariaDB nebo je v tomto případě potřeba něco změnit?

  4. ScaleGrid PostgreSQL na cloudové infrastruktuře VMware