Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các giao dịch và bế tắc của Django DB

Lưu ý rằng bạn có thể muốn sử dụng with -style cú pháp. Đoạn mã sau phải giống với đoạn mã của bạn ở trên, nhưng có nhiều pytonic hơn.

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)

hoặc với một người trang trí

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)

Tuy nhiên, điều đó không giải quyết được vấn đề bế tắc của bạn ..

Bạn có thể thành công khi giảm mức cô lập giao dịch của mình. Điều này mặc định trên mysql thành REPEATABLE READ nó quá nghiêm ngặt đối với hầu hết các tập quán. (oracle mặc định thành READ COMMITTED ')

Bạn có thể đạt được điều này bằng cách thêm nó vào settings.py của mình

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. Menu đa cấp từ các bản ghi cơ sở dữ liệu

  2. Django Không thể thêm hoặc cập nhật hàng con:ràng buộc khóa ngoại không thành công

  3. chuyển đổi ngày chuỗi python thành ngày giờ của mysql

  4. Truy vấn MySql để thay đổi chữ thường thành chữ hoa

  5. MariaDB - không thể đăng nhập với quyền root