Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django dumpdata在特殊字符上失败_Python_Django - Fatal编程技术网

Python Django dumpdata在特殊字符上失败

Python Django dumpdata在特殊字符上失败,python,django,Python,Django,我正试图将我的整个数据库转储到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

我正试图将我的整个数据库转储到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.
(env)PS C:\dev\watch\u something>python manage.py dumpdata>data.json
CommandError:无法序列化数据库:“charmap”编解码器无法对位置1中的字符“\u0130”进行编码:字符映射到
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“C:\dev\watch\u something\env\lib\site packages\django\db\models\sql\compiler.py”,第1602行,游标
cursor.close()
sqlite3.ProgrammingError:无法在关闭的数据库上操作。
这是因为我数据库中的一个字符是特殊字符。如何正确转储数据库


仅供参考,在django中保存
json
数据时,所有其他DB功能都可以正常工作

默认编码现在是
locale.getpreferredencoding(False)
(…)

locale.getpreferredencoding
功能的文档中,我们可以:

根据用户偏好返回用于文本数据的编码。在不同的系统上,用户首选项的表达方式不同,并且在某些系统上可能无法以编程方式使用,因此此函数仅返回猜测

我发现“hacky”是覆盖这些设置的有效方法:

在django项目的文件
settings.py
中添加以下行:

import _locale
_locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])

这是来自djangoproject.com的解决方案
进入“设置”在“语言”-“管理语言设置”-“更改系统区域设置”-“区域设置”中有一个“使用Unicode UTF-8进行全球语言支持”框。 如果我们应用它并重新启动,那么我们就可以从Python获得一个合理的、现代的、默认的编码。
一种解决方案是使用
/manage.py dumpdata-o data.json
而不是
/manage.py dumpdata>data.json

另一种解决方案是使用、运行:


如果您有多个Python环境,在应用变通方法之前,需要检查您是否针对正确的环境发出了
Python manage.py
。在我的例子中,我遇到了相同的错误:数据库是在Linux上的容器化环境下创建的,具有更高的Python版本,但Django和其他软件包也存在于Windows上的传统本地环境中。此外,项目目录作为卷附加到容器,并且内容在本地和容器中是相同的。因此,我只是混淆并在本地运行
manage.py
,而不是连接到容器。

如果有人偶然发现了这一点,请注意语法“python manage.py dumpdata>giveme.json”可能仍然无法使用此解决方案,但在我的情况下“python manage.py dumpdata-o plesegiveme.json”用上面的黑客解决方案确实有效。为我工作,谢谢
python -Xutf8 ./manage.py dumpdata > data.json