Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо този цикъл не показва актуализиран брой обекти на всеки пет секунди?

Тъй като Python DB API е по подразбиране в режим AUTOCOMMIT=OFF и (поне за MySQLdb) на ниво на изолация REPEATABLE READ. Това означава, че зад кулисите имате текуща транзакция на база данни (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 decorator е само за влизане в режим на управление на транзакциите (това може да се направи и ръчно с помощта на функциите transaction.enter_transaction_management/leave_transaction_managemen).

Още нещо - да знаете - автокомитът на Django не е същият автокомит, който имате в базата данни - той е напълно независим. Но това е извън обхвата на този въпрос.

Редактирано на 22/01/2012

Тук е „двоен отговор“ на подобен въпрос.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Последни x записи в блога - но само веднъж на потребител

  2. Прехвърлянията на отдалечена mySQL връзка не могат да се свържат с MySQL 4.1+, като се използва старата несигурна грешка при удостоверяване от XAMPP

  3. Как да защитя форума си от спам?

  4. Как да ИЗБЕРЕТЕ записи без NULL стойности в MySQL

  5. Как да нулирате първичния ключ на таблица?