Python 尽管使用--natural标志,外键约束仍失败
我正在尝试将Django应用程序数据库从SQLite迁移到MySQl 我使用的是Python 尽管使用--natural标志,外键约束仍失败,python,mysql,django,Python,Mysql,Django,我正在尝试将Django应用程序数据库从SQLite迁移到MySQl 我使用的是--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)
--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,“无法删除或更新父行:外键约束失败”)
这里怎么了
使用manage.py loaddata hunt
时出现错误IntegrityError:无法加载contenttypes.ContentType(pk=23):(1062,“重复输入'south migrationhistory'键'app_label')
我在设置中更新了数据库,如下所示,错误消失
'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;",
}
},
我在如下设置中更新了数据库,错误消失了
'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;",
}
},
这使得您永远不会检查任何外键。这就省去了外键的全部意义,即引用完整性。这只是为了使您永远不会检查任何外键。这就消除了外键的全部要点,即引用完整性。