使用Python向MySQL数据库中存入json类型数据

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

    因为出于个人项目的需要,获取到的数据都是json类型的,并且都要存入MySQL数据库中,因为json类型数据不像一般的文本数据,所以在存入MySQL时需要注意的问题很多。

    在网上找了很多方法,整理了一下比较实用可靠的,总结下来就是下面的过程:

  • MySQL表中需要保证存储json数据的列类型为BLOB;

  • 使用sql语句时,使用MySQLdb.excape_string函数来对json数据进行转义;

  • 查询数据时,将结果使用json.loads就能够得到原来的Python数据类型;

    下面就来实战一下,实际上,在我的需求中,我需要将Python中的字典存入MySQL,所以只能先将其转换为json来处理。




1.实战存储json数据到MySQL中


(1)数据存储


  • 1.创建能存储json数据类型的数据库表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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              |
+ -------------------+
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     |                |
+ -------+--------+------+-----+---------+----------------+
rows  in  set  (0.00 sec)
  • 2.使用Python生成json数据类型

1
2
3
4
5
6
7
8
9
>>>  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数据库

1
2
>>>  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数据

1
2
3
>>> sql  =  tsql. format (json = MySQLdb.escape_string(d_json));
>>> sql
'insert into jsondata(data) values(\'{\\"name\\": \\"xpleaf\\"}\')'
  • 6.执行sql语句

1
2
3
4
>>> cur.execute(sql)
1L
>>> cur.execute(sql)
1L


(2)数据查询


    上面的操作完成之后,我们已经成功将json的数据存取到MySQL中,关键是能不能将该数据取出来,并且最后还原成Python的字典类型类型。


  • 1.先在MySQL中查询存储的数据

1
2
3
4
5
6
7
mysql>  select  from  jsondata;
+ ----+--------------------+
| id | data               |
+ ----+--------------------+
|  1 | { "name" "xpleaf" } |
+ ----+--------------------+
1 row  in  set  (0.00 sec)
  • 2.在Python交互器中查询数据

1
2
3
4
5
6
7
8
9
10
>>> 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数据

1
2
3
4
5
6
7
8
9
>>> 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类型数据,再使用上面的方法,就非常简便了。





本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1905368,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
44 0
|
5天前
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
31 0
|
5天前
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——Spring Boot 默认对Json的处理
本文介绍了在Spring Boot中返回Json数据的方法及数据封装技巧。通过使用`@RestController`注解,可以轻松实现接口返回Json格式的数据,默认使用的Json解析框架是Jackson。文章详细讲解了如何处理不同数据类型(如类对象、List、Map)的Json转换,并提供了自定义配置以应对null值问题。此外,还对比了Jackson与阿里巴巴FastJson的特点,以及如何在项目中引入和配置FastJson,解决null值转换和中文乱码等问题。
27 0
|
9天前
|
Rust JavaScript 前端开发
[oeasy]python075_什么是_动态类型_静态类型_强类型_弱类型_编译_运行
本文探讨了编程语言中的动态类型与静态类型、强类型与弱类型的概念。通过实例分析,如Python允许变量类型动态变化(如`age`从整型变为字符串),而C语言一旦声明变量类型则不可更改,体现了动态与静态类型的差异。此外,文章还对比了强类型(如Python,不允许隐式类型转换)和弱类型(如JavaScript,支持自动类型转换)的特点。最后总结指出,Python属于动态类型、强类型语言,对初学者友好但需注意类型混淆,并预告下期内容及提供学习资源链接。
48 21
|
9天前
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为&#39;0&#39;或&#39;1&#39;,查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
7天前
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
38 11
|
3天前
|
关系型数据库 MySQL Java
【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
|
3天前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
20 1
|
6天前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。
|
2天前
|
存储 JSON API
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例: