0.说明
因为出于个人项目的需要,获取到的数据都是json类型的,并且都要存入MySQL数据库中,因为json类型数据不像一般的文本数据,所以在存入MysqL时需要注意的问题很多。
在网上找了很多方法,整理了一下比较实用可靠的,总结下来就是下面的过程:
下面就来实战一下,实际上,在我的需求中,我需要将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'>
>>> 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}')";
>>> 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的字典类型类型。
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类型数据,再使用上面的方法,就非常简便了。