Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Django DB लेनदेन और गतिरोध

ध्यान दें कि आप अधिक स्पष्ट with का उपयोग करना चाह सकते हैं -स्टाइल सिंटैक्स। निम्नलिखित आपके उपरोक्त कोड के समान होना चाहिए, लेकिन अधिक पाइटोनिक होना चाहिए।

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)

या डेकोरेटर के साथ

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)

हालांकि इससे आपकी गतिरोध की समस्या का समाधान नहीं होता..

आपको अपने लेन-देन अलगाव स्तर को कम करने में सफलता मिल सकती है। यह mysql पर डिफ़ॉल्ट रूप से REPEATABLE READ . पर निर्भर करता है जो अधिकांश उपयोगों के लिए बहुत सख्त है। (ओरेकल डिफ़ॉल्ट रूप से READ COMMITTED ')

आप इसे अपने settings.py . में जोड़कर हासिल कर सकते हैं

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. अंतिम 2 वर्ण स्ट्रिंग द्वारा आदेश दें

  2. डेटाबेस से फ़ाइलों को jsp . में उनके पथ से पुनर्प्राप्त करना

  3. MySQL में हैश पासवर्ड के लिए किस फ़ंक्शन का उपयोग करना है?

  4. एक ही विदेशी कुंजी (Django 1.8, MySQL 5.5) वाली वस्तुओं के लिए ऑटोइनक्रिकमेंट-जैसे फ़ील्ड

  5. कच्चे Sequelize क्वेरी के साथ प्रतिस्थापन का उपयोग करना:सिंगल कोट्स से परहेज करना?