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

Transaksi dan kebuntuan Django DB

Perhatikan bahwa Anda mungkin ingin menggunakan with yang lebih jelas -gaya sintaks. Berikut ini harus identik dengan kode Anda di atas, tetapi lebih pytonic.

from django.db import transaction
from __future__ import with_statement

def process(self, db, data):

    with transaction.commit_on_success(using=db):
        # do things with my_objects...
        for obj in my_objects:
            obj.save(using=db)

atau dengan dekorator

from django.db import transaction

@transaction.commit_on_success(using=db)
def process(self, db, data):    

    # do things with my_objects...
    for obj in my_objects:
        obj.save(using=db)

Itu tidak menyelesaikan masalah kebuntuan Anda..

Anda mungkin berhasil menurunkan tingkat isolasi transaksi Anda. Ini default pada mysql ke REPEATABLE READ yang terlalu ketat untuk sebagian besar penggunaan. (default oracle ke READ COMMITTED ')

Anda dapat mencapainya dengan menambahkan ini ke settings.py . Anda

MYSQL_DATABASE_OPTIONS = {'init_command': 'SET storage_engine=INNODB; SET 
                 SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;'}

DATABASES = {
  'default': {  # repeat for each db
       'ENGINE':  ... etc
       ...
       ...
       'OPTIONS': MYSQL_DATABASE_OPTIONS
      }
  }



  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 mendapatkan hasil dari kueri jika tanggal yang dipilih berada di antara dua tanggal?

  2. MySQL, Periksa apakah ada kolom dalam tabel dengan SQL

  3. Menyimpan 30-Feb di Mysql (Pemformatan Tanggal)

  4. PHP mySQL memeriksa apakah nama pengguna dan kata sandi ada di database

  5. tidak dapat menghubungkan pegas dengan mysql