Django dumpdata 在特殊字符上失败

我正在尝试将整个数据库转储为 json。当我运行时python manage.py dumpdata > data.json出现错误:


(env) PS C:\dev\watch_something> python manage.py dumpdata > data.json

CommandError: Unable to serialize database: 'charmap' codec can't encode character '\u0130' in position 1: character maps to <undefined>

Exception ignored in: <generator object cursor_iter at 0x0460C140>

Traceback (most recent call last):

  File "C:\dev\watch_something\env\lib\site-packages\django\db\models\sql\compiler.py", line 1602, in cursor_iter

    cursor.close()

sqlite3.ProgrammingError: Cannot operate on a closed database.

这是因为我的数据库中的字符之一是特殊字符。如何正确转储数据库?


仅供参考,所有其他数据库功能都工作正常


慕码人2483693
浏览 93回答 5
5回答

动漫人物

一种解决方案是使用./manage.py dumpdata -o data.json而不是./manage.py dumpdata > data.json.另一个解决方案是使用Python的UTF-8模式,运行:python -Xutf8 ./manage.py dumpdata > data.json

千巷猫影

为了json在 django 中保存数据,使用了TextIOWrapper :默认编码现在是locale.getpreferredencoding(False)(...)在功能文档中locale.getpreferredencoding我们可以读到:根据用户偏好返回用于文本数据的编码。用户首选项在不同系统上的表达方式不同,并且在某些系统上可能无法以编程方式使用,因此此函数仅返回猜测值。“hacky”但覆盖这些设置的工作方法:settings.py在django 项目的文件中添加以下行:import _locale _locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])

汪汪一只猫

这是来自 djangoproject.com 的解决方案您转到“设置”,在“语言”-“管理语言设置”-“更改系统区域设置”-“区域设置”中,有一个“使用 Unicode UTF-8 进行全球语言支持”框。如果我们应用它并重新启动,那么我们就会从 Python 获得一个合理的、现代的默认编码。设置框看起来像这样。启用检查并重新启动系统

湖上湖

在Windows上我解决我的问题的方法是添加到你的设置import&nbsp;_locale _locale._getdefaultlocale&nbsp;=&nbsp;(lambda&nbsp;*args:&nbsp;['en_US',&nbsp;'utf8'])仅在 Windows 上的 shell 上运行python&nbsp;-Xutf8&nbsp;manage.py&nbsp;dumpdata&nbsp;--exclude&nbsp;auth.permission&nbsp;--exclude&nbsp;contenttypes&nbsp;>&nbsp;db.json我实际上这样做了它有效python&nbsp;-Xutf8&nbsp;manage.py&nbsp;dumpdata&nbsp;-o&nbsp;data.json但没有显示我安装的应用程序的数据

智慧大石

如果您有多个 Python 环境,那么在应用解决方法之前,值得检查您的问题是否python manage.py针对正确的环境。在我的例子中,我遇到了同样的错误:数据库是在 Linux 上的容器化环境下创建的,具有较高的 Python 版本,但 Django 和其他包也存在于 Windows 上的旧本地环境中。此外,项目目录作为卷附加到容器,并且内容在本地和容器中是相同的。所以,我只是混合并manage.py在本地运行,而不是附加到容器上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python