我正在尝试将我的整个数据库转储到 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.
Run Code Online (Sandbox Code Playgroud)
这是因为我的数据库中的一个角色是特殊角色。如何正确转储数据库?
仅供参考,所有其他数据库功能都可以正常工作
Jul*_*ard 10
一种解决方案是使用./manage.py dumpdata -o data.json代替./manage.py dumpdata > data.json.
另一种解决方案是使用Python 的 UTF-8 模式,运行:
python -Xutf8 ./manage.py dumpdata > data.json
Run Code Online (Sandbox Code Playgroud)
小智 8
要json在 Django 中保存数据,使用TextIOWrapper:
默认编码现在是
locale.getpreferredencoding(False)(...)
在locale.getpreferredencoding功能文档中,我们可以阅读:
根据用户偏好返回用于文本数据的编码。用户偏好在不同系统上的表达方式不同,并且在某些系统上可能无法以编程方式使用,因此此函数仅返回猜测值。
在这里,我发现了“hacky”但可以覆盖这些设置的工作方法:
在settings.pydjango 项目的文件中添加以下几行:
import _locale
_locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])
Run Code Online (Sandbox Code Playgroud)