Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa loop ini tidak menampilkan jumlah objek yang diperbarui setiap lima detik?

Karena Python DB API secara default dalam mode AUTOCOMMIT=OFF, dan (setidaknya untuk MySQLdb) pada level isolasi REPEATABLE READ. Ini berarti bahwa di balik layar Anda memiliki transaksi basis data yang sedang berlangsung (InnoDB adalah mesin transaksional) di mana akses pertama ke baris yang diberikan (atau mungkin bahkan tabel, saya tidak yakin) memperbaiki "tampilan" sumber daya ini untuk bagian yang tersisa dari transaksi.

Untuk mencegah perilaku ini, Anda harus 'menyegarkan' transaksi saat ini:

  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)

-- perhatikan bahwa transaction.autocommit dekorator hanya untuk memasuki mode manajemen transaksi (ini juga dapat dilakukan secara manual menggunakan fungsi transaction.enter_transaction_management/leave_transaction_managemen).

Satu hal lagi - untuk diperhatikan - autocommit Django bukanlah autocommit yang sama dengan yang Anda miliki di database - ini sepenuhnya independen. Tapi ini di luar cakupan untuk pertanyaan ini.

Diedit pada 22/01/2012

Di sini adalah "jawaban kembar" untuk pertanyaan serupa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghasilkan tampilan pohon dari kumpulan hasil ini berdasarkan Algoritma Traversal Pohon?

  2. Penanganan Kesalahan Prosedur Tersimpan MySQL

  3. MySQL:UNIK, tetapi DEFAULT NULL - diizinkan dengan membuat tabel. Lebih dari 1 NULL diperbolehkan untuk disisipkan. Mengapa?

  4. Objek database kelas tidak dapat dikonversi ke string

  5. ALTER TABLE untuk menambahkan kunci primer komposit