【问题标题】:How to prevent Django fixtures from conflicting with existing data如何防止 Django 固定装置与现有数据发生冲突
【发布时间】:2013-05-30 01:55:20
【问题描述】:

我正在尝试使用manage.py loaddata myfixture.json 故意批量覆盖我数据库中的几条记录。但是,它给了我错误:

IntegrityError: Problem installing fixture 'myfixture.json': Could not load myapp.Person(pk=1): (1062, "Duplicate entry 'Bob' for key 'name'")

如果主键匹配现有记录,我认为 loaddata 的行为是覆盖记录?我错了,还是在 Django 1.5 中改变了?如何让它覆盖?

【问题讨论】:

  • 您确定主键匹配吗?您可以从 myfixture.json 为 Bob 发布部分内容吗?你确定 db 中的 Bob 有 pk=1 吗?
  • 您是否尝试使用自然键 (dumpdata --natural) 创建您的夹具?

标签: python django


【解决方案1】:

我找到了一种方法来修改 Django 的 loaddata 命令以在加载时正确解析自然键,并避免重新加载重复项。修改后的命令发布here。官方加载数据之间的唯一区别是第 189-201 行。

【讨论】:

  • 您的链接给出了 404 :-/
  • @ArnoDeceuninck 已更新。应该注意的是,这个答案现在已经很老了,我相信标准的 loaddata 命令可能已经内置了这个功能。
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多