我试图将整个数据库转储到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.
这是因为我的数据库中有一个字符是特殊字符。我如何正确地转储数据库?
仅供参考,所有其他数据库功能工作正常
6条答案
按热度按时间7ivaypg91#
一种解决方案是使用
./manage.py dumpdata -o data.json
而不是./manage.py dumpdata > data.json
。另一种解决方案是使用Python的UTF-8模式,运行:
ht4b089n2#
要在django中保存
json
数据,使用TextIOWrapper:默认编码现在是
locale.getpreferredencoding(False)
(...)在
locale.getpreferredencoding
函数的文档中,我们可以阅读:根据用户首选项返回用于文本数据的编码。用户首选项在不同系统上的表达方式不同,在某些系统上可能无法通过编程方式提供,因此此函数仅返回猜测值。
Here我发现“黑客”,但工作方法覆盖这些设置:
在django项目的
settings.py
文件中添加以下行:g0czyy6m3#
以下是来自www.example.com的解决方案djangoproject.com
你去设置有一个“使用Unicode UTF-8的全球语言支持”,框中的“语言”-“管理语言设置”-“更改系统区域设置”-“区域设置”。如果我们应用,并重新启动,然后我们得到一个明智的,现代的,默认的编码从Python。djangoproject.com
设置框如下所示。启用检查并重新启动系统x1c 0d1x
yfwxisqw4#
在windows上,我解决我的方法是添加到您的设置
运行这在shell上只在windows上
我真的这么做了成功了
但没有显示已安装应用程序的数据
4nkexdtk5#
如果你有多个Python环境,在应用解决方法之前,有必要检查一下你是否在正确的环境下发出了
python manage.py
。这就是我遇到的同样的错误:数据库是在Linux的容器化环境下创建的,Python版本更高,但是Django和其他包也存在于Windows的遗留本地环境中。同样,项目目录作为一个卷附加到容器,内容在本地和容器中是相同的。所以,我只是在本地混合运行manage.py
,而不是附加到容器。tp5buhyn6#
“我认为这是目前最好的办法:在目录Python311\Lib\site-packages\django\core\serializers中,打开json.py文件。在json.py文件中,找到以下部分:
类序列化程序(PythonSerializer):
.................
def _init_options(self):
.............
#默认为False
self.json_kwargs.setdefault(“ensure_ascii”,False)
#你将False修复为True
self.json_kwargs.setdefault(“ensure_ascii”,True)
希望这对你们有帮助!