使用Python向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) >>> d_json = json.dumps(d) >>> d_json '{"name": "xpleaf"}' >>> type(d_json)
  • 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)
  • 3.使用json.loads解析json数据

>>> mydata = json.loads(mydata) >>> mydata {u'name': u'xpleaf'} >>> type(mydata) >>> mydata['name'] u'xpleaf' >>> mydata.get('name') u'xpleaf'

    可以看到,最开始我们使用Pythonn创建了一个字典类型的数据,之后将其转换为json数据类型,以便于存入MySQL中,在这个过程中需要使用MySQL.escape_string方法来对json数据进行转义,最后查询数据时,我们使用json.loads方法来解析json数据,从而得到我们最开始存储的Python字典类型数据。


2.在实际当中的应用

    显然,如果在使用Python的过程中,需要将字典或其它数据类型的数据存入到MySQL中时,先将其转换为json类型数据,再使用上面的方法,就非常简便了。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站名称:使用Python向MySQL数据库中存入json类型数据-创新互联
文章地址:http://hbruida.cn/article/ddghjs.html