Django Python loaddata 失败并显示 django.db.utils.IntegrityError

Rox*_*nne 9 python django

接手了一个数据库项目,我正在努力将远程数据库加载到本地数据库中。

该应用程序是用 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'),
    }
}`
Run Code Online (Sandbox Code Playgroud)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'lit',
        'USER': 'admin',
        'PASSWORD': 'admin',
        'HOST': 'localhost',
        'PORT': '5432'
    }
Run Code Online (Sandbox Code Playgroud)

只是给了我一个新的错误。

django.db.utils.IntegrityError:安装固定装置“C:..\lit\backups\dbbackup_20190915_145546.json”时出现问题:无法加载 contenttypes.ContentType(pk=17):重复键值违反了唯一约束“django_content_type_a pp_label_model_76bund”键 (app_label, model)=(admin, logentry) 已经存在。

我已经跑了

python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

vor*_*ack 16

在您的本地数据库中,您创建了一些 ContentType 实例。

当您迁移远程数据库时,再次创建模型的所有 ContentType。

但是当你想加载数据时,你会尝试再次加载这个实例。

你有 2 个解决方案

1- 使用 django shell 从远程主机中删除所有内容类型实例

python manage.py shell

>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)

2- 从转储数据中删除内容类型实例

python manage.py dumpdata --exclude contenttypes
Run Code Online (Sandbox Code Playgroud)

  • 您必须避免将 content_type 表内容导出到固定文件 (3认同)