尽管使用了--natural标志,但外键约束仍然失败

时间:2014-01-05 08:16:16

标签: python mysql django

我正在尝试将我的Django应用程序数据库从SQLite迁移到MySQl。

this answer建议我使用--natural标记与manage.py dumpdata

以下是我的模特

from django.db import models

class DJManager(models.Manager):
    def get_by_natural_key(self, name):
        return self.get(name=name)

class DJ(models.Model):
    objects = DJManager()

    name = models.CharField(max_length=50, unique=True)
    rank = models.IntegerField()
    img = models.ImageField(upload_to='/img/', height_field=None, width_field=None)
    soundcloud_profile = models.CharField(max_length=100, blank=True, null=True)

    def natural_key(self):
        return (self.name)

    #for human readable representation of objects
    def __unicode__(self):
        return self.name

class Song(models.Model):
    song_id = models.IntegerField()
    name = models.CharField(max_length=100)
    title = models.CharField(max_length=100)
    normalized_name = models.CharField(max_length=100)
    artist = models.ForeignKey(DJ, default=None, blank=True, null=True)
    artists = models.CharField(max_length=100)
    remixers = models.CharField(max_length=100, default=None, blank=True, null=True)
    release_date = models.DateField()
    slug = models.CharField(max_length=100)
    artwork = models.CharField(max_length=100)
    genres = models.CharField(max_length=50)
    duplicate = models.BooleanField(default=False)
    votes = models.IntegerField(default=0)

    #for human readable representation of objects
    def __unicode__(self):
        return self.normalized_name

我正在使用命令manage.py dumdata --natural > hunt.json

转储数据

然后我正在更新设置以连接到MySQL数据库。

接下来,我正在使用manage.py syncdb同步数据库。

然后使用manage.py reset contenttypes向我提供错误(1217, 'Cannot delete or update a parent row: a foreign key constraint fails')

这里有什么问题?

使用manage.py loaddata hunt时,会出现错误IntegrityError: Could not load contenttypes.ContentType(pk=23): (1062, "Duplicate entry 'south-migrationhistory' for key 'app_label'")

1 个答案:

答案 0 :(得分:-1)

我在设置中更新了我的数据库,如下所示,错误就消失了。

'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'abc',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            "init_command": "SET foreign_key_checks = 0;",
        }
    },