Django dumpdata 生成无效的 json 格式文件

Posted

技术标签:

【中文标题】Django dumpdata 生成无效的 json 格式文件【英文标题】:Django dumpdata generates invalid json format file 【发布时间】:2018-08-11 08:43:33 【问题描述】:

我正在使用 Django1.11。我想从 sqlite 迁移到 PostgreSQL。所以我需要从 Sqlite 转储数据并加载到 PostgreSQL。 我用

生成转储数据
python3 manage.py dumpdata > db.json

我已将 db 设置更改为 PostgreSQL 并做到了

python3 manage.py loaddata db.json

得到了这个错误。

raise JSONDecodeError("Expecting value", s, err.value) from None

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

所以我使用hexdump 并尝试了。

raise JSONDecodeError("Expecting value", s, err.value) from None

django.core.serializers.base.DeserializationError: Problem installing fixture '/var/lib/myproject/fixtures/db.json': Expecting value: line 1 column 1 (char 0)

我查看了db.json,它不是有效的 json。

【问题讨论】:

【参考方案1】:

我正在研究 linux。问题是在db.json 的开头,附加并突出显示了“尝试使用 Windows 路径”这句话。 当我使用vi command 打开文件时,我认为它不是文件的一部分。但它是文件的一部分。我只是手动删除了这句话。有效。但最后我没有使用python loaddata 进行数据库迁移。如果你使用 pyhton 函数,你可能会遇到很多错误。所以我放弃了在 Django 内置函数上做这件事,并使用了pgloader。方法简单,没有错误。

【讨论】:

这里的情况类似,但恶意文本是我的 Django 项目的settings.py 打印的一行。任何 Django 打印到 stdout 的东西最终都会在 JSON 输出之前写入文件的头部。 是的 @CameronHyde 我遇到了完全相同的问题,在任意 python 模块中执行的打印语句(对我来说是admin.py)。我用tail -n +2 db.json > db_cleaned.json跳过了第一行

以上是关于Django dumpdata 生成无效的 json 格式文件的主要内容,如果未能解决你的问题,请参考以下文章

python测试开发django-176.数据库迁移数据(manage.py dumpdata)

python测试开发django-176.数据库迁移数据(manage.py dumpdata)

Django dumpdata 和 loaddata 不适用于多对多中间模型

传输数据 | Django Heroku

带有转储数据和迁移的 Django 备份策略

Django 正在为 Postgres 生成无效的 SQL