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

MySQL INSERT ... थोक डालने के लिए django 1.4 के साथ डुप्लीकेट कुंजी अद्यतन पर

इसलिए मैंने एक कस्टम मैनेजर बनाया। यहाँ प्रबंधक है:

class BulkInsertManager(models.Manager):
    def _bulk_insert_or_update(self, create_fields, update_fields, values):

        from django.db import connection, transaction
        cursor = connection.cursor()

        db_table = self.model._meta.db_table

        values_sql = []
        values_data =[]

        for value_lists in values:
            values_sql.append( "(%s)" % (','.join([ "%s" for i in range(len(value_lists))]),) )
            values_data.extend(value_lists)

        base_sql = "INSERT INTO %s (%s) VALUES " % (db_table, ",".join(create_fields))

        on_duplicates = []

        for field in update_fields:
            on_duplicates.append(field + "=VALUES(" + field +")")

        sql = "%s %s ON DUPLICATE KEY UPDATE %s" % (base_sql, ", ".join(values_sql), ",".join(on_duplicates))

        cursor.executemany(sql, [values_data])
        transaction.commit_unless_managed()

और एक नमूना मॉडल:

class User_Friend(models.Model):
    objects = BulkInsertManager() # assign a custom manager to handle bulk insert

    id = models.CharField(max_length=255)
    user = models.ForeignKey(User, null=False, blank=False)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    city = models.CharField(max_length=50, null=True, blank=True)
    province = models.CharField(max_length=50, null=True, blank=True)
    country =  models.CharField(max_length=30, null=True, blank=True)

और नमूना कार्यान्वयन:

def save_user_friends(user, friends):
    user_friends = []
    for friend in friends:

        create_fields = ['id', 'user_id', 'first_name', 'last_name', 'city', 'province', 'country']
        update_fields = ['first_name', 'last_name', 'city', 'province', 'country']

        user_friends.append(
            [
                str(user.id), 
                str(friend['id']),
                friend['first_name'],
                friend['last_name'],
                friend['city'],
                friend['province'],
                friend['country'],
            ]
        )

    User_Friend.objects._bulk_insert_or_update(create_fields, update_fields, user_friends)

यह रहा जिस्ट



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे MySQL में UNSIGNED और SIGNED INT का उपयोग कब करना चाहिए?

  2. AJAX + jQuery + PHP . के साथ MySQL को डेटा भेजें

  3. MySQL में दिए गए दायरे में क्वेरी पॉइंट्स

  4. मैक पर MySQL वर्कबेंच से कनेक्ट नहीं हो सकता। '127.0.0.1' पर MySQL सर्वर से कनेक्ट नहीं हो सकता (61) Mac Macintosh

  5. रिवर्स इंजीनियर MySQL और PostgreSQL डीबी के लिए आवेदन?