接管一个数据库项目,我正在努力将远程数据库加载到本地数据库中。
该应用是使用Django构建的,本地数据库仍然依赖于开箱即用的sqlite
。
远程数据库是postgresql
类型。
我试图在终端中运行的代码:
python manage.py loaddata *[path to backup.json file]*
我遇到了一些完整性错误,因此像任何有理智的人一样,我刷新了本地db,因为因为无论如何我都想加载远程数据。
python manage.py flush
python manage.py syncdata
现在,当我尝试从json文件加载数据时,出现以下错误:
django.db.utils.IntegrityError:安装夹具'C:... \ lit \ backups \ dbbackup_20190915_145546.json'时出现问题:无法加载contenttypes.ContentType(pk = 1):UNIQUE约束失败:django_content_type.app_label, django_conten t_type.model
从以下位置更改settings.py
文件:
`DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}`
到
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'lit',
'USER': 'admin',
'PASSWORD': 'admin',
'HOST': 'localhost',
'PORT': '5432'
}
给我一个新的错误。
django.db.utils.IntegrityError:安装夹具'C:.. \ lit \ backups \ dbbackup_20190915_145546.json'时出现问题:无法加载contenttypes.ContentType(pk = 17):重复的键值违反了唯一约束“ django_content_type_a pp_label_model_76bd3d3b_uniq“ 详细信息:密钥(app_label,model)=(管理员,登录)已经存在。
我已经跑了
python manage.py makemigrations
python manage.py migrate
答案 0 :(得分:2)
在本地数据库中,创建一些ContentType实例。
当您迁移远程数据库时,将再次创建模型的所有ContentType。
但是当您要加载数据时,请尝试再次加载该实例。
您有2个解决方案
1-使用django shell从远程主机中删除所有内容类型实例
python manage.py shell
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
2-从转储的数据中删除内容类型实例
python manage.py dumpdata --exclude contenttypes