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

ManyToManyField के साथ मॉडल की प्राथमिक कुंजी बदलने के लिए माइग्रेशन कैसे लिखें?

तो मैं इसे ठीक करने के लिए एसक्यूएल के साथ समाप्त हुआ। मेरे समाधान का मूल नीचे है - मूल रूप से मैं

  • नई प्रोफ़ाइल में user_id पर एक अनुक्रमणिका बनाएं
    • विदेशी कुंजी के रूप में संदर्भित करने से पहले इस अनुक्रमणिका का अस्तित्व में होना आवश्यक है
  • तालिका के माध्यम से एक नया बनाएं
    • मैंने SHOW CREATE TABLE userprofile_userprofile_subjects के आउटपुट के साथ शुरुआत की (MySQL विशिष्ट)
    • मैंने मुख्य नामों और बाधाओं के नामों को थोड़ा संशोधित किया है
  • तालिका के माध्यम से सभी डेटा को नए में कॉपी करें
  • पुराने को तालिका के माध्यम से छोड़ें
  • तालिका के माध्यम से पुराने का नाम रखने के लिए तालिका के माध्यम से नए का नाम बदलें
  • आखिरकार वह ऑपरेशन करें जो मेरे लिए django माइग्रेशन स्वचालित रूप से जेनरेट करता है

मैं उम्मीद करता हूं कि इससे किसी की मदद होगी। और मुझे अभी भी एक बेहतर समाधान के बारे में जानने में दिलचस्पी होगी।

from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        # ...
    ]

    operations = [
        migrations.RunSQL(
            'ALTER TABLE userprofile_userprofile '
            'ADD INDEX `userprofile_userprofile_1234abcd` (user_id)'
        ),
        migrations.RunSQL (
            'CREATE TABLE userprofile_temp_table ('
            '`id` int(11) NOT NULL AUTO_INCREMENT, '
            '`userprofile_id` int(11) NOT NULL, '
            '`subject_id` int(11) NOT NULL, '
            'PRIMARY KEY (`id`), '
            'UNIQUE KEY `userprofile_userprofile_subjects_userprofile_us_7ded3060_uniq` (`userprofile_id`,`subject_id`), '
            'KEY `userprofile_userprofile_subject_1be9924f` (`userprofile_id`), '
            'KEY `userprofile_userprofile_subject_e5a9504a` (`subject_id`), '
            'CONSTRAINT `subject_id_refs_id_69796996` FOREIGN KEY (`subject_id`) REFERENCES `otherapp_subject` (`id`), '
            'CONSTRAINT `userprofile_user_id_refs_user_id_1234abcd` FOREIGN KEY (`userprofile_id`) REFERENCES `userprofile_userprofile` (`user_id`) '
            ') ENGINE=InnoDB AUTO_INCREMENT=35500 DEFAULT CHARSET=utf8 '
        ),
        migrations.RunSQL (
            'INSERT INTO userprofile_temp_table '
            '(userprofile_id, subject_id) '
            '('
            '  SELECT userprofile_userprofile.user_id, userprofile_userprofile_subjects.subject_id'
            '    FROM userprofile_userprofile_subjects'
            '    INNER JOIN userprofile_userprofile'
            '    ON userprofile_userprofile_subjects.userprofile_id ='
            '        userprofile_userprofile.id'
            ')'
        ),
        migrations.RunSQL (
            'DROP TABLE `userprofile_userprofile_subjects`'
        ),
        migrations.RunSQL (
            'RENAME TABLE `userprofile_temp_table` TO `userprofile_userprofile_subjects`'
        ),
        migrations.RemoveField(
            model_name='userprofile',
            name='id',
        ),
        migrations.AlterField(
            model_name='userprofile',
            name='user',
            field=models.OneToOneField(
                primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL
            ),
            preserve_default=True,
        ),
    ]



  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 में बल्क इंसर्ट

  2. MySQL में डुप्लीकेट रिकॉर्ड डालने से कैसे बचें?

  3. ग्रुप बाय से पहले MySQL ऑर्डर

  4. प्रोजेक्ट लिंक वैंप सर्वर पर काम नहीं करते हैं

  5. कैसे php में एक सुरक्षित mysql तैयार बयान बनाने के लिए?