亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django dumpdata 在特殊字符上失敗

Django dumpdata 在特殊字符上失敗

慕碼人2483693 2023-12-12 21:05:27
我正在嘗試將整個數據庫轉儲為 json。當我運行時python manage.py dumpdata > data.json出現錯誤:(env) PS C:\dev\watch_something> python manage.py dumpdata > data.jsonCommandError: 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.這是因為我的數據庫中的字符之一是特殊字符。如何正確轉儲數據庫?僅供參考,所有其他數據庫功能都工作正常
查看完整描述

5 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

一種解決方案是使用./manage.py dumpdata -o data.json而不是./manage.py dumpdata > data.json.

另一個解決方案是使用Python的UTF-8模式,運行:

python?-Xutf8?./manage.py?dumpdata?>?data.json


查看完整回答
反對 回復 2023-12-12
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

為了json在 django 中保存數據,使用了TextIOWrapper :

默認編碼現在是locale.getpreferredencoding(False)(...)

在功能文檔中locale.getpreferredencoding我們可以讀到:

根據用戶偏好返回用于文本數據的編碼。用戶首選項在不同系統上的表達方式不同,并且在某些系統上可能無法以編程方式使用,因此此函數僅返回猜測值。

“hacky”但覆蓋這些設置的工作方法:

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

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


查看完整回答
反對 回復 2023-12-12
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

這是來自 djangoproject.com 的解決方案
您轉到“設置”,在“語言”-“管理語言設置”-“更改系統區域設置”-“區域設置”中,有一個“使用 Unicode UTF-8 進行全球語言支持”框。如果我們應用它并重新啟動,那么我們就會從 Python 獲得一個合理的、現代的默認編碼。

設置框看起來像這樣。啟用檢查并重新啟動系統

https://img1.sycdn.imooc.com/65785ac90001d31104310223.jpg

查看完整回答
反對 回復 2023-12-12
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

在Windows上我解決我的問題的方法是添加到你的設置

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

僅在 Windows 上的 shell 上運行

python -Xutf8 manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

我實際上這樣做了它有效

python -Xutf8 manage.py dumpdata -o data.json

但沒有顯示我安裝的應用程序的數據


查看完整回答
反對 回復 2023-12-12
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

如果您有多個 Python 環境,那么在應用解決方法之前,值得檢查您的問題是否python manage.py針對正確的環境。在我的例子中,我遇到了同樣的錯誤:數據庫是在 Linux 上的容器化環境下創建的,具有較高的 Python 版本,但 Django 和其他包也存在于 Windows 上的舊本地環境中。此外,項目目錄作為卷附加到容器,并且內容在本地和容器中是相同的。所以,我只是混合并manage.py在本地運行,而不是附加到容器上。



查看完整回答
反對 回復 2023-12-12
  • 5 回答
  • 0 關注
  • 371 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號