Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego ta pętla nie wyświetla zaktualizowanej liczby obiektów co pięć sekund?

Ponieważ Python DB API jest domyślnie w trybie AUTOCOMMIT=OFF i (przynajmniej dla MySQLdb) na poziomie izolacji POWTARZALNY ODCZYT. Oznacza to, że za kulisami masz trwającą transakcję bazodanową (InnoDB to silnik transakcyjny), w której pierwszy dostęp do danego wiersza (a może nawet tabeli, nie jestem pewien) naprawia „widok” tego zasobu dla pozostałej części transakcji.

Aby temu zapobiec, musisz „odświeżyć” bieżącą transakcję:

  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)

-- zauważ, że transaction.autocommit dekorator służy tylko do wejścia w tryb zarządzania transakcjami (można to również zrobić ręcznie za pomocą funkcji transaction.enter_transaction_management/leave_transaction_managemen).

Jeszcze jedna rzecz - aby być świadomym - autocommit Django nie jest tym samym autocommitem, który masz w bazie danych - jest całkowicie niezależny. Ale to jest poza zakresem tego pytania.

Edytowano 22.01.2012

Tutaj to „podwójna odpowiedź” na podobne pytanie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak powiązać dynamiczny json z widokiem drzewa wpf

  2. Kiedy należy odbudować indeksy bazy danych?

  3. MySQL:unikalne pole musi być indeksem?

  4. Preferowany silnik MySQL – MyISAM lub InnoDB

  5. MySQL aktualizuje połączoną tabelę