使用Python向MySQL數據庫中存入json類型數據

0.說明python


    由於出於我的項目的須要,獲取到的數據都是json類型的,而且都要存入MySQL數據庫中,由於json類型數據不像通常的文本數據,因此在存入MySQL時須要注意的問題不少。
mysql

    在網上找了不少方法,整理了一下比較實用可靠的,總結下來就是下面的過程:sql

  • MySQL表中須要保證存儲json數據的列類型爲BLOB;數據庫

  • 使用sql語句時,使用MySQLdb.excape_string函數來對json數據進行轉義;json

  • 查詢數據時,將結果使用json.loads就可以獲得原來的Python數據類型;ide

    下面就來實戰一下,實際上,在個人需求中,我須要將Python中的字典存入MySQL,因此只能先將其轉換爲json來處理。函數




1.實戰存儲json數據到MySQL中fetch


(1)數據存儲spa


  • 1.建立能存儲json數據類型的數據庫表orm

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語句

>>> 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字典類型數據。




2.在實際當中的應用


    顯然,若是在使用Python的過程當中,須要將字典或其它數據類型的數據存入到MySQL中時,先將其轉換爲json類型數據,再使用上面的方法,就很是簡便了。

相關文章
相關標籤/搜索