1. 程式人生 > >向MySQL資料庫中存入json型別資料

向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

javaMySql資料庫插入資料

package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLExc

java 使用jdbcmysql資料庫插入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

利用jmetermysql資料庫插入資料

準備工作: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、用WorkbenchMySQL資料庫匯入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”的錯誤,執行效果如下圖所示: 將錯誤提示面板翻至頂端,可以看到資料庫給出的錯誤提示,如下圖: 根據錯誤提示可

JavaMysql資料庫儲存圖片等二進位制檔案的實現,以及常見報錯的解決!

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