向MySQL資料庫中存入json型別資料
0.說明
因為出於個人專案的需要,獲取到的資料都是json型別的,並且都要存入MySQL資料庫中,因為json型別資料不像一般的文字資料,所以在存入MySQL時需要注意的問題很多。
在網上找了很多方法,整理了一下比較實用可靠的,總結下來就是下面的過程:
- MySQL表中需要保證儲存json資料的列型別為BLOB;
- 使用sql語句時,使用MySQLdb.excape_string函式來對json資料進行轉義;
- 查詢資料時,將結果使用json.loads就能夠得到原來的Python資料型別;
下面就來實戰一下,實際上,在我的需求中,我需要將Python中的字典存入MySQL,所以只能先將其轉換為json來處理。
1.實戰儲存json資料到MySQL中
(1)資料儲存
1.建立能儲存json資料型別的資料庫表
mysql> create table jsondata
-> (
-> id int(6) auto_increment primary key,
-> data blob(1024)
-> );
Query OK, 0 rows affected (0.25 sec)
mysql> show tables; +-------------------+ | Tables_in_spyinux | +-------------------+ | jsondata | | test | +-------------------+ 2 rows in set (0.00 sec)
mysql> describe jsondata; +-------+--------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+----------------+ | id | int(6) | NO | PRI | NULL | auto_increment | | data | blob | YES | | NULL | | +-------+--------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
2.使用Python生成json資料型別
>>> import json
>>> d = {'name': 'xpleaf'}
>>> type(d)
<type 'dict'>
>>> d_json = json.dumps(d)
>>> d_json
'{"name": "xpleaf"}'
>>> type(d_json)
<type 'str'>
3.使用MySQLdb連線MySQL資料庫
>>> import MySQLdb
>>> conn = m.connect(host='localhost', port=3306, user='root', passwd='123456', db='spyinux')>>> cur = conn.cursor()
4.寫原生sql語句
1 | >>> tsql = "insert into jsondata(data) values('{json}')" ; |
5.使用MySQLdb方法轉義json資料--[重點]
>>> sql = tsql.format(json=MySQLdb.escape_string(d_json));
>>> sql
'insert into jsondata(data) values(\'{\\"name\\": \\"xpleaf\\"}\')'
6.執行sql語句
>>> cur.execute(sql)
1L
>>> cur.execute(sql)
1L
(2)資料查詢
上面的操作完成之後,我們已經成功將json的資料存取到MySQL中,關鍵是能不能將該資料取出來,並且最後還原成Python的字典型別型別。
1.先在MySQL中查詢儲存的資料
mysql> select * from jsondata;
+----+--------------------+
| id | data |
+----+--------------------+
| 1 | {"name": "xpleaf"} |
+----+--------------------+
1 row in set (0.00 sec)
2.在Python互動器中查詢資料
>>> cur.execute('select * from jsondata');
1L
>>> mydata = cur.fetchall()
>>> mydata
((1L, '{"name": "xpleaf"}'),)
>>> mydata = mydata[0][1]
>>> mydata
'{"name": "xpleaf"}'
>>> type(mydata)
<type 'str'>
3.使用json.loads解析json資料
>>> mydata = json.loads(mydata)
>>> mydata
{u'name': u'xpleaf'}
>>> type(mydata)
<type 'dict'>
>>> mydata['name']
u'xpleaf'
>>> mydata.get('name')
u'xpleaf'
可以看到,最開始我們使用Pythonn建立了一個字典型別的資料,之後將其轉換為json資料型別,以便於存入MySQL中,在這個過程中需要使用MySQL.escape_string方法來對json資料進行轉義,最後查詢資料時,我們使用json.loads方法來解析json資料,從而得到我們最開始儲存的Python字典型別資料。
相關推薦
向MySQL資料庫中存入json型別資料
0.說明 因為出於個人專案的需要,獲取到的資料都是json型別的,並且都要存入MySQL資料庫中,因為json型別資料不像一般的文字資料,所以在存入MySQL時需要注意的問題很多。 在網上找了很多方法,整理了一下比較實用可靠的,總結下來就是下面的過程:MySQL表
『PHP學習筆記』系列八:向MySQL資料庫中新增資料
資料表結構: 資料表原有資料: 向MySQL資料庫寫入資料: INSERT INTO 語句通常用於向 MySQL 表新增新的記錄: INSERT INTO table_name (column1, column2, column3,...) VALUES
向MySQL資料庫中插入帶emoji表情符的資料時報錯
問題:向MySQL資料庫中插入帶emoji表情符的資料時報錯 原因:utf8字符集不支援emoji表情符,需要改為utf8mb4字符集(utf8mb4是MySQL在5.5.3之後增加的,實際開發中建議使用該字符集) 解決: 1. 設定MySQL伺服器及資料庫表的字符集
Java程式向MySql資料庫中插入的資料變成了問號
其實,當我們看到這個問題的時候都會很快的想到是編碼格式的問題。但是當我檢視MyEclipse中的編碼格式的時候發現,編碼方式是沒有問題的,而且自己寫的JSP頁面中的編碼格式也是沒有問題的。那麼這會嘛原因的? 後來在檢視Mysql的資料時候發現: 1、MySQL的預設編碼是La
java向MySql資料庫中插入資料
package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLExc
java 使用jdbc向mysql資料庫中插入1億條資料
<span style="font-size:14px;"><span style="font-size:14px;">package com.ddx.zhang; import java.sql.SQLException; import java
向mysql資料庫中插入資料時顯示“Duplicate entry '1′ for key ‘PRIMARY' ”錯誤
錯誤情況如題,出現這個錯誤的原因十分簡單: 很明顯,這是主鍵的問題。 在一張資料表中是不能同時出現多個相同主鍵的資料的 這就是錯誤的原因,解決的方法: 1.可以將這張表設定成無主鍵(mysql支
向MySQL資料庫中批量讀取資料
這是在一次作業的時候用到的,將一個csv檔案中的資料讀取到MySQL建好的一個表中去。話不多說,上程式碼。#coding=utf-8 import MySQLdb conn = MySQLdb.co
利用jmeter向mysql資料庫中插入資料
準備工作:1.已安裝好的jmeter2.mysql-connector-java.jar包:https://download.csdn.net/download/qq_41919825/103155693.mysql資料庫4.資料庫名稱test,表名稱tmptable,欄位i
在Django框架下向MongoDB資料庫中匯入.scv檔案資料
在學習了一些MongoDB和Django框架的一些基礎知識後,我對MongoDB以及Django知識已經有了一個初步的掌握,是時候對學長的專案裡面的東西進行一個初步的實踐了,於是我選擇從Django框架中向MongoDB匯入資料的這部分程式碼開始。通過複用幾段學長專案裡的程式碼,在我自己新建的專案中
python 將mysql資料庫中的int型別修改為NULL 報1366錯誤,解決辦法
gt.run_sql()是用pymysql 封裝的類 distribution_sort_id type: int目的:將此欄位值全部修改為NULL g=2gt.run_sql("update goods set distribution_sort_id=%s;",(g,))修改是成功
能否向Mysql檢視中插入/更新/刪除資料
要通過檢視更新基本表資料,必須保證檢視是可更新檢視,即可以在INSET、UPDATE或DELETE等語句當中使用它們。對於可更新的檢視,在檢視中的行和基表中的行之間必須具有一對一的關係。還有一些特定的其他結構,這類結構會使得檢視不可更新。 如果檢視包含下述結構中的任何
使用JDBC在MySQL資料庫中快速批量插入資料
使用JDBC連線MySQL資料庫進行資料插入的時候,特別是大批量資料連續插入(10W+),如何提高效率呢? 在JDBC程式設計介面中Statement 有兩個方法特別值得注意: void addBatch() throws SQLException Adds a set
Mybatis中對於Mysql資料庫中NULL的日期資料報錯 mysql錯誤: Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP
原 mysql錯誤: Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP 2010年06月01日 17:38:00 閱讀數:5307
關於 Ajax中返回json型別資料為什麼使用? eval()
以下是本人從多年參與專案開發總結出來的一點點經驗,如果你有不同的看法,請回復我,咱們可以研究研究 1.關於eval(對於伺服器返回的JSON字串,如果jquery非同步請求沒做型別說明,
1、用Workbench向MySQL資料庫中匯入SQL檔案
一、點選workbench登入資料庫二、新建schema,自己命名三、可以看到新建的schema中table等均為空四、左上角選單欄file-Open SQL Script-選中要匯入的SQL檔案五、在開啟的SQL檔案中,找到除註釋外的第一行程式碼,在其前面加一句“use [
Python3----對遠端windows server 2003伺服器的mysql資料庫中指定庫建立資料表
Python3—-對遠端windows server 2003伺服器的mysql資料庫中指定庫建立資料表 1、參考資料庫的資料表的格式 2、Python程式碼: # -*- coding:
向MySQL資料庫中匯入SQL檔案出錯,innodb
在MySQL資料庫中匯入SQL檔案,出現“Unsuccessful”的錯誤,執行效果如下圖所示: 將錯誤提示面板翻至頂端,可以看到資料庫給出的錯誤提示,如下圖: 根據錯誤提示可
Java向Mysql資料庫中儲存圖片等二進位制檔案的實現,以及常見報錯的解決!
Mysql資料庫的功能很強大,除了能儲存字元等常見資料以外,它同樣可以儲存圖片等二進位制檔案,本文以儲存照片為例。 一、Mysql儲存二進位制檔案常見報錯有: 1.com.mysql.jdbc.PacketTooBigException: Packet for query
向mysql資料庫中插入大文字
@Testpublic void demo5() throws SQLException, FileNotFoundException{System.setProperty("jdbc:drivers", "com.mysql.jdbc.Driver");Propertie