运行 python manage.py loaddata datadump.json 时出现 DB 错误

Posted

技术标签:

【中文标题】运行 python manage.py loaddata datadump.json 时出现 DB 错误【英文标题】:DB Error when running python manage.py loaddata datadump.json 【发布时间】:2011-05-21 06:13:40 【问题描述】:

我正在将我的 Django 数据库从 sqlite 迁移到 mysql。我已经毫无问题地完成了以下操作:

python manage.py dumpdata > datadump.json 将您的 settings.py 更改为 mysql 数据库。

但是当我发出以下命令时 python manage.py loaddata datadump.json 我得到这个错误:

IntegrityError: (1062, "Duplicate entry '13-13' for key 'from_category_id'")

谁能告诉我如何解决这个问题,以便我可以再次运行命令并希望加载我的数据?

谢谢, J.

【问题讨论】:

1.数据库中有现有数据吗? 是的,我在数据库中有数据。 【参考方案1】:
    您的数据库中有现有数据吗?, 尝试使用 indent --4 来获得一个您可以关注的版本 发布一些示例数据 您似乎遇到了重复的键违规,或者您尝试插入的数据与列类型不匹配,即检查您的 models.py 中应用的约束、字段类型以及在 mysql 中创建的表

那么问题将是为什么它在 SQLITE 而不是我的 sql 中工作?

真的很简单,SQLITE 不做任何类型检查,即您可以轻松地将文本插入整数字段。在将数据插入 MySQL 之前,您需要清理数据。

与大多数 SQL 数据库不同,SQLite 可以 不限制可能的数据类型 插入到基于 列声明类型。相反,SQLite 使用动态类型。

来自http://www.sqlite.org/lang_createtable.html

【讨论】:

感谢您的回复。愚蠢的问题,我检查mysql数据库还是sqlite数据库?在这一点上,我不知道我应该编辑哪一个。 :D 其实你想检查你的 1. 你的模型 vs 你的数据 vs mysql db。即,如果导出的 JSON 中的数据不一致(字段中的文本应该是整数)。无论如何,不​​知道为什么你有这个问题,因为即使你 SQLITE 不做类型检查,我很确定 django 管理员会阻止你插入不正确的值。那么您是否在管理员之外进行了一些更新? 我永远无法找出问题所在。所以,因为项目很小,我只是创建了另一个项目,将我的数据迁移到新项目,然后:python manage.py dumpdata > datadump.json,更改了我的 settings.py,syncdb'ed,然后是 python manage.py loaddata datadump.json 看起来有效。当我有更多的时间时,我将不得不回去看看出了什么问题。谢谢。

以上是关于运行 python manage.py loaddata datadump.json 时出现 DB 错误的主要内容,如果未能解决你的问题,请参考以下文章

运行 python manage py migrate 时出错

无法运行 python manage.py rusnerver

Django的manage.py runserver 可以长期运行吗

python命令行运行django项目, can't open file 'manage.py' 问题解决

Django的manage.py runserver 可以长期运行吗

运行“python manage.py syncdb”的“未知命令 syncdb”