Django從MySQL數據庫讀取json類型數據的坑


Python從MySQL數據庫讀取json類型數據的坑

場景:最近在寫Django,寫到購物車的時候,每次退出時,使用json格式,將購物車中的信息存儲到mysql表中,然后在用戶每次登陸時,讀取相應的數據,顯示在前端網頁。

1、json格式的數據,以什么樣的字段類型存儲:

  一開始,我是用的是varchar類型進行存儲,但是發現,再登陸時,都取出來的數據變成了字符串類型,之前寫好的代碼,無法對其進行解析;

  之后,選擇了json類型進行存儲,結果讀取出來也是不能用;

  經過Google,找到了這篇博文,經過閱讀,選擇了Blob類型進行存儲;

2、存儲后,再進行登陸,會報錯:Expecting property name enclosed in double quotes: line 1 column 2 (char 1):

  還是進行Google,在stackoverflow中,有相關解答;(這篇問答中高票回答,我的情況沒有使用他的json.loads(ast.literal_eval()) 這樣處理)

  出現這種錯誤,是因為json格式數據,必須使用雙引號,且最后一條數據后面沒有逗號;

  去看了下我的mysql中的數據,在django將json數據寫入的時候,全部變為了單引號;

  因此,需要將讀取出來的數據進行在處理,修改為json標准格式,此時:就需要導入ast庫,使用ast.literal_eval()函數進行處理,當然可以使用正則替換方式,將其中的單引號換為雙引號;

3、經過以上處理,運行后又出現了問題:malformed node or string: b'{"20": {"id": 20, "goodsname": "\\u795e\\u821f。。。。。

  究其原因:是因為Bolo字段類型,存儲的數據為二進制Bytes類型的數據;

  將該數據讀取出來,需要將其進行默認轉義:data.decode();

  然后再進行ast.literal_eval()的處理;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM