向MySQL数据库中存入json类型数据

源文章地址:https://www.linuxidc.com/Linux/2017-03/141865.htm

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字典类型数据。


首先,需要在后端搭建一个接口,用于接收前端传来的json数据存入数据库。以下是一个示例的Node.js代码: ``` const express = require('express'); const mysql = require('mysql'); const bodyParser = require('body-parser'); const app = express(); const port = 3000; // 解析json请求体 app.use(bodyParser.json()); // 连接数据库 const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test_db' }); connection.connect(); // 接收post请求 app.post('/saveJsonData', (req, res) => { const jsonData = req.body; // 将json数据转换成字符串 const jsonString = JSON.stringify(jsonData); // 存入数据库 const sql = `INSERT INTO json_data (data) VALUES ('${jsonString}')`; connection.query(sql, (error, results) => { if (error) throw error; console.log('Json data saved successfully!'); res.send('Json data saved successfully!'); }); }); app.listen(port, () => { console.log(`Server started at http://localhost:${port}`); }); ``` 在前端,可以使用axios库来发送post请求,并将json数据作为请求体发送到后端接口。 ``` <template> <div> <h1>Vue App</h1> <button @click="saveJsonData">Save Json Data</button> </div> </template> <script> import axios from 'axios'; export default { methods: { saveJsonData() { const jsonData = { name: 'John', age: 30 }; axios.post('http://localhost:3000/saveJsonData', jsonData) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); } } } </script> ``` 当点击“Save Json Data”按钮时,会发送post请求到后端接口,并将json数据存入数据库。需要注意的是,这只是一个简单的示例代码,实际情况还需要添加一些错误处理和安全性措施。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值