python - Django Python loaddata 因 django.db.utils.IntegrityError 而失败
问题描述
接管了一个数据库项目,我正在努力将远程数据库加载到本地数据库中。
该应用程序是用 django 构建的,本地数据库仍然依赖于sqlite
开箱即用的。
远程数据库属于postgresql
类型。
我试图在终端中运行的代码:
python manage.py loaddata *[path to backup.json file]*
我遇到了一些完整性错误,所以像任何合理的人一样,我刷新了本地数据库,因为无论如何我都想加载远程数据。
python manage.py flush
python manage.py syncdata
现在,当我尝试从 json 文件加载数据时,出现以下错误:
django.db.utils.IntegrityError:安装夹具'C:...\lit\backups\dbbackup_20190915_145546.json'时出现问题:无法加载contenttypes.ContentType(pk = 1):唯一约束失败:django_content_type.app_label,django_conten t_type。模型
从以下位置更改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)=(admin, logentry) 已经存在。
我已经跑了
python manage.py makemigrations
python manage.py migrate
解决方案
在您的本地数据库中,您创建一些 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
推荐阅读
- c++ - 解析在 namespace-d 模板函数中使用的函数
- javascript - 对子组件中复制的音频对象的更改会改变原始对象
- python-3.x - pywinauto - 在对话框/弹出窗口中查找/读取不属于对话框任何控件的文本
- excel - Excel在为公式选择单元格时避免插入变量定义的命名单元格?
- python - 如何在列表中添加相邻的数字?我无法获得最后一个变量
- python-3.x - 如何为 Python 3.7.2 的 Python Shell 清除屏幕?
- html - 为什么在我的 html 头标签中添加 google 字体链接后我的网页会抖动?
- owl-carousel - 为什么猫头鹰轮播不喜欢doctype?
- package - 重新定义已删除的包(Common Lisp)
- swift - SwiftUI 崩溃预览中具有资产目录颜色的颜色扩展