【问题标题】:I am unable to loaddata json into my postgres database我无法将数据 json 加载到我的 postgres 数据库中
【发布时间】:2020-11-03 12:08:29
【问题描述】:

我正在尝试执行以下命令,但我收到了这个很长的错误。我也尝试过进入 dbshel​​l 进行 trucanate,正如我在其他地方看到的建议,但我得到了 psql 未安装或未找到路径的错误,即使它应该是。

我已经成功地在 postgres 数据库中获取了我的表,但是除了一些我觉得奇怪的之外,它们都是空的。我的 Json 转储文件包含它需要的所有内容,但它不会转移。

有人有什么想法吗?

(venv) DEMOPROJECT>python manage.py loaddata "datadump.json"
Traceback (most recent call last):
  File "\PycharmProjects\WebP1\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "django_content_type_app_label_model_76bd3d3b_uniq"
DETAIL:  Key (app_label, model)=(admin, logentry) already exists.


django.db.utils.IntegrityError: Problem installing fixture '\DEMOPROJECT\datadump.json': Could not load contenttypes.ContentType(pk=1): duplicate key value violates unique constraint "django_content_type_app_label_model_76bd3
d3b_uniq"
DETAIL:  Key (app_label, model)=(admin, logentry) already exists.


【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

    请注意,您的唯一索引正在重复:键 (app_label, model)=(admin, logentry) 已存在。

    这意味着以下之一:

    • 您的 json 转储文件包含不正确的重复条目
    • 您已经加载或部分加载了数据库

    【讨论】:

    • json 文件应该没问题,因为我正在关注视频教程。我的数据库在 sqlite 上运行良好,但我想将它移动到 postresql,因为我听说它要好得多。在migrate --sync-dbloaddata 命令之后我得到了我的错误。迁移似乎加载了一些 wagtail 数据,但没有从同一个 json 转储加载到我的任何 django 模型中。我假设 loaddata 命令是用来插入带有创建表的数据的,这辈子都无法解决。
    【解决方案2】:

    ContentType 是一种应用程序模型的注册表,旨在作为一个界面,能够访问有关模型的信息,而无需了解有关模型细节的大量信息。
    django auth 框架使用 ContentType 将权限映射到模型。 django 管理应用程序通过模型 LogEntry 跟踪对其对象的更改,该模型本身使用 ContentTypes(这是导致您发布的错误的模型)。

    如果查询 ContentType 以获取它尚不知道的模型,则会创建具有该模型的新记录:这意味着 ContentType 表的构成可能因环境而异 - 这取决于模型被请求在。

    看到您的转储已经包含 ContentType 的数据,并假设对于使用 ContentType 的任何模型,转储还包含对 那个新的 ContentType 表的引用,您应该可以删除所有当前位于本地过时数据库的 ContentType 表中:

    from django.contrib.contenttypes.models import ContentType
    ContentType.objects.all().delete()
    

    您应该能够毫无问题地加载您的数据转储。

    如果您想确保不会丢失任何内容,您可以备份您的 ContentType 的内容:

    python manage.py dumpdata contenttypes.ContentType
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多