首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事
您的当前位置:首页正文

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

2023-11-10 来源:画鸵萌宠网

    因为出于个人项目的需要,获取到的数据都是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语句

  • >>> 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类型数据,再使用上面的方法,就非常简便了。

    本文出自 “香飘叶子” 博客,请务必保留此出处http://xpleaf.blog.51cto.com/9315560/1905368

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

    标签:python   json   mysqldb   

    小编还为您整理了以下内容,可能对您也有帮助:

    python中 如何将从接口取到的json数据存入mysql数据库 最好有具体的例子 谢谢

    python操作mysql,没怎么折腾过。

    不过网上资料一堆一堆的,自己google一下即可。

    如果你需要json转换成对应的对象的话,倒是可以参考我写的:

    【整理】什么是JSON+如何处理JSON字符串

    其中就有关于python的:

    【整理】Python中将(字典,列表等)变量格式化成(漂亮的,树形的,带缩进的,JSON方式的)字符串输出

    【经验记录】Python中json.loads的时候出错->要注意要解码的Json字符的编码

    (此处不给贴地址,请用google搜标题,即可找到帖子地址)追问话说我需要的是如何把json格式的数据的值存入mysql

    追答直接把json字符串,存入mysQL?

    那和单个的字符,存入mysql,就没区别了。

    那就只剩下,python如何保持数据到mysql中了。

    这样的问题,随便一搜,都一大把啊。

    如何将从接口取到的json数据存入mysql数据库

    mysql数据库建立表,存储json字段用text类型

    然后从接口中获取JSON数据,转成STRING格式,直接插入到这个字段就可以了。

    从数据库里python获取数据存到本地数据库

    昨天下班后忽然兴起想写一个爬虫抓抓网页上的东西。花了一个钟简单学习了python的基础语法,然后参照网上的例子自己写了个爬虫。 (推荐学习:Python视频教程)

    python数据爬下来保存在本地,一般是文件或数据库中,但是文件形式相比要更加简单,如果只是自己写爬虫玩,可以用文件形式来保存数据。

    #coding=utf-8import urllib.requestimport reimport os '''Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据urlopen 方法用来打开一个urlread方法 用于读取Url上的数据''' def getHtml(url): page = urllib.request.urlopen(url); html = page.read(); return html; def getImg(html): imglist = re.findall('img src="(http.*?)"',html) return imglist html = getHtml("https://www.zhihu.com/question/34378366").decode("utf-8");imagesUrl = getImg(html); if os.path.exists("D:/imags") == False: os.mkdir("D:/imags"); count = 0;for url in imagesUrl: print(url) if(url.find('.') != -1): name = url[url.find('.',len(url) - 5):]; bytes = urllib.request.urlopen(url); f = open("D:/imags/"+str(count)+name, 'wb'); f.write(bytes.read()); f.flush(); f.close(); count+=1;

    经测试,基本功能还是可以实现的。花的较多的时间就是正则匹配哪里,因为自己对正则表达式也不是非常熟悉。所以还是花了点时间。

    注:上面的程序基于 python 3.5。python3 和 python2 还是有些区别的。我刚开始看基础语法的时候就栽了一些坑里。

    从数据库里python获取数据存到本地数据库

    昨天下班后忽然兴起想写一个爬虫抓抓网页上的东西。花了一个钟简单学习了python的基础语法,然后参照网上的例子自己写了个爬虫。 (推荐学习:Python视频教程)

    python数据爬下来保存在本地,一般是文件或数据库中,但是文件形式相比要更加简单,如果只是自己写爬虫玩,可以用文件形式来保存数据。

    #coding=utf-8import urllib.requestimport reimport os '''Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据urlopen 方法用来打开一个urlread方法 用于读取Url上的数据''' def getHtml(url): page = urllib.request.urlopen(url); html = page.read(); return html; def getImg(html): imglist = re.findall('img src="(http.*?)"',html) return imglist html = getHtml("https://www.zhihu.com/question/34378366").decode("utf-8");imagesUrl = getImg(html); if os.path.exists("D:/imags") == False: os.mkdir("D:/imags"); count = 0;for url in imagesUrl: print(url) if(url.find('.') != -1): name = url[url.find('.',len(url) - 5):]; bytes = urllib.request.urlopen(url); f = open("D:/imags/"+str(count)+name, 'wb'); f.write(bytes.read()); f.flush(); f.close(); count+=1;

    经测试,基本功能还是可以实现的。花的较多的时间就是正则匹配哪里,因为自己对正则表达式也不是非常熟悉。所以还是花了点时间。

    注:上面的程序基于 python 3.5。python3 和 python2 还是有些区别的。我刚开始看基础语法的时候就栽了一些坑里。

    mysql使用什么类型存json数据(什么数据库适合存json)

    将记录转为Json格式

    publicString(List,ClassbeanClass,StringdatePatten,inttotalCount){

    JSONArrayjsonArray=JSONArray.fromObject();

    JsonConfigjsonConfig=newJsonConfig();

    JSONArray=newJSONArray();

    TbaseModel=null;

    for(inti=0;i

    JSONObjectrowData=(JSONObject)jsonArray.get(i);

    baseModel=(T)JSONObject.toBean(rowData,beanClass);

    JSONObjectjo=JSONObject.fromObject(baseModel,jsonConfig);

    .add(jo);

    }

    jsonString=new();

    jsonString.append(.toString());

    //返回结果集

    returnjsonString.toString();

    }

    //使用实例

    StringstrData=(users,S_USER.class,null,users.size());

    //users:多条记录;S_USER:POJO类

    mysql使用什么类型存json数据(什么数据库适合存json)

    将记录转为Json格式

    publicString(List,ClassbeanClass,StringdatePatten,inttotalCount){

    JSONArrayjsonArray=JSONArray.fromObject();

    JsonConfigjsonConfig=newJsonConfig();

    JSONArray=newJSONArray();

    TbaseModel=null;

    for(inti=0;i

    JSONObjectrowData=(JSONObject)jsonArray.get(i);

    baseModel=(T)JSONObject.toBean(rowData,beanClass);

    JSONObjectjo=JSONObject.fromObject(baseModel,jsonConfig);

    .add(jo);

    }

    jsonString=new();

    jsonString.append(.toString());

    //返回结果集

    returnjsonString.toString();

    }

    //使用实例

    StringstrData=(users,S_USER.class,null,users.size());

    //users:多条记录;S_USER:POJO类

    如何使用Python处理JSON数据


    如何使用Python处理JSON数据?本篇文章就给大家介绍使用Python处理JSON数据的基本方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
    在介绍使用Python处理JSON数据的基本方法之前,我们首先要了解一下什么是JSON?
    JSON代表“JavaScript Object Notation”,可以说是“基于JavaScript语言符号的数据格式”。但是,该表示法仅基于JavaScript,可用于其他各种语言。
    JSON是我们存储和交换数据的一种方式,它通过其语法实现,并在许多Web应用程序中使用。JSON的优点在于它具有人类可读的格式,这可能是在数据传输中使用它的原因之一,此外还有使用API时的有效性。
    在JSON中,数据以名称/值(name/value)对表示;大括号内存储对象,每个名称后跟':'(冒号),名称/值对之间要用(逗号)分隔;方括号包含数组,值以(逗号)分隔。
    JSON格式数据的示例:
    {
    "book1":{
    "title": "Python Beginners",
    "year": 2005 ,
    "page": 399
    },
    "book2":{
    "title": "Python Developers",
    "year": 2006 ,
    "page": 650
    }
    }下面我们来详细了解一下在Python中如何处理JSON数据。
    Python使得处理JSON数据变得简单。实现此目的的模块是json模块。该模块应该包含在Python(内置)安装中,因此你不需要像使用PDF和Excel文件那样安装任何外部模块。要使用此模块,你唯一需要的是导入它(开头写入):
    import json但是,JSON库是做什么的呢?此库主要从文件或字符串解析JSON。它还将JSON解析为Python中的字典或列表,反之亦然,即将Python字典或列表转换为JSON字符串。
    读取JSON(JSON转Python)
    读JSON意味着将JSON转换为Python值(对象)。如上所述,json库将JSON解析为Python中的字典或列表。为此,我们使用loads()函数(从字符串加载),如下所示:
    import json
    jsonData = '{"name": "Frank", "age": 39}'
    jsonToPython = json.loads(jsonData)如果要查看输出,请执行 print jsonToPython,在这种情况下,你将获得以下输出:
    {'age': 39, 'name': 'Frank'}也就是说,数据作为Python字典(JSON对象数据结构)返回。
    Python转JSON
    上一节我们介绍了JSON转Python,这一节我们将向你展示如何将Python值转换(编码)为JSON。
    假设我们在Python中有以下字典:
    import json
    pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True}
    dictionaryToJson = json.mps(pythonDictionary)如果我们运行 print dictionaryToJson,我们得到以下JSON数据:
    {"age": 44, "isEmployed": true, "name": "Bob"}因此,此输出被视为对象(Dictionary)的数据表示。该方法mps()是此类操作的关键。
    此时需要注意的是,JSON不能存储所有类型的Python对象,只能存储以下类型:列表; 字典; 布尔值; 数; 字符串; 没有。因此,需要转换任何其他类型以便存储在JSON中。
    假设我们有以下课程:
    class Employee(object):
    def __init__(self, name):
    self.name = name假设我们创建了一个新对象abder,如下所示:
    abder = Employee('Abder')如果我们想将此对象转换为JSON,该怎么办?那是json.mps(abder)?在这种情况下,你将收到类似于以下内容的错误:
    Traceback (most recent call last):
    File "test.py", line 8, in <mole>
    abderJson = json.mps(abder)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in mps
    return _default_encoder.encode(obj)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
    TypeError: <__main__.Employee object at 0x10e74b750> is not JSON serializable但是,有解决方法吗?幸运的是有。要解决此问题,我们可以定义类似于以下的方法:
    def jsonDefault(object):
    return object.__dict__然后将对象编码为JSON,如下所示:
    jsonAbder = json.mps(abder, default=jsonDefault)如果你运行 print jsonAbder,你应该得到以下输出:
    {"name": "Abder"}我们现在已经将Python对象(abder)编码为JSON。

    如何使用Python处理JSON数据


    如何使用Python处理JSON数据?本篇文章就给大家介绍使用Python处理JSON数据的基本方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
    在介绍使用Python处理JSON数据的基本方法之前,我们首先要了解一下什么是JSON?
    JSON代表“JavaScript Object Notation”,可以说是“基于JavaScript语言符号的数据格式”。但是,该表示法仅基于JavaScript,可用于其他各种语言。
    JSON是我们存储和交换数据的一种方式,它通过其语法实现,并在许多Web应用程序中使用。JSON的优点在于它具有人类可读的格式,这可能是在数据传输中使用它的原因之一,此外还有使用API时的有效性。
    在JSON中,数据以名称/值(name/value)对表示;大括号内存储对象,每个名称后跟':'(冒号),名称/值对之间要用(逗号)分隔;方括号包含数组,值以(逗号)分隔。
    JSON格式数据的示例:
    {
    "book1":{
    "title": "Python Beginners",
    "year": 2005 ,
    "page": 399
    },
    "book2":{
    "title": "Python Developers",
    "year": 2006 ,
    "page": 650
    }
    }下面我们来详细了解一下在Python中如何处理JSON数据。
    Python使得处理JSON数据变得简单。实现此目的的模块是json模块。该模块应该包含在Python(内置)安装中,因此你不需要像使用PDF和Excel文件那样安装任何外部模块。要使用此模块,你唯一需要的是导入它(开头写入):
    import json但是,JSON库是做什么的呢?此库主要从文件或字符串解析JSON。它还将JSON解析为Python中的字典或列表,反之亦然,即将Python字典或列表转换为JSON字符串。
    读取JSON(JSON转Python)
    读JSON意味着将JSON转换为Python值(对象)。如上所述,json库将JSON解析为Python中的字典或列表。为此,我们使用loads()函数(从字符串加载),如下所示:
    import json
    jsonData = '{"name": "Frank", "age": 39}'
    jsonToPython = json.loads(jsonData)如果要查看输出,请执行 print jsonToPython,在这种情况下,你将获得以下输出:
    {'age': 39, 'name': 'Frank'}也就是说,数据作为Python字典(JSON对象数据结构)返回。
    Python转JSON
    上一节我们介绍了JSON转Python,这一节我们将向你展示如何将Python值转换(编码)为JSON。
    假设我们在Python中有以下字典:
    import json
    pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True}
    dictionaryToJson = json.mps(pythonDictionary)如果我们运行 print dictionaryToJson,我们得到以下JSON数据:
    {"age": 44, "isEmployed": true, "name": "Bob"}因此,此输出被视为对象(Dictionary)的数据表示。该方法mps()是此类操作的关键。
    此时需要注意的是,JSON不能存储所有类型的Python对象,只能存储以下类型:列表; 字典; 布尔值; 数; 字符串; 没有。因此,需要转换任何其他类型以便存储在JSON中。
    假设我们有以下课程:
    class Employee(object):
    def __init__(self, name):
    self.name = name假设我们创建了一个新对象abder,如下所示:
    abder = Employee('Abder')如果我们想将此对象转换为JSON,该怎么办?那是json.mps(abder)?在这种情况下,你将收到类似于以下内容的错误:
    Traceback (most recent call last):
    File "test.py", line 8, in <mole>
    abderJson = json.mps(abder)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in mps
    return _default_encoder.encode(obj)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
    File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
    TypeError: <__main__.Employee object at 0x10e74b750> is not JSON serializable但是,有解决方法吗?幸运的是有。要解决此问题,我们可以定义类似于以下的方法:
    def jsonDefault(object):
    return object.__dict__然后将对象编码为JSON,如下所示:
    jsonAbder = json.mps(abder, default=jsonDefault)如果你运行 print jsonAbder,你应该得到以下输出:
    {"name": "Abder"}我们现在已经将Python对象(abder)编码为JSON。

    mysql数据库中某个字段存的是json数据,如何对json数据中的数据进行操作?

    这个可以吧json格式的字符串解析成数组json_decode()函数,变成数组以后就可以方便操作了,可以删除数组中的任意一项,也可以增加一项比如:array_push($data,['sort'=>3,'catentryId'=>10003]),再变成json格式的存入数据库。方法有多种,这里简单的示例下

    python向mysql中插入数据提示错误?

    答:数据库本身是不支持字典类型的(已知的绝大多)
    方法有两种:
    1、把字典或者json格式数据作为字符串(string)直接插入、读取的时候再转为字典。
    2、为了避免某些字符、引号等转义问题发生、可以使用base64编码后导入数据库、读取时候再用base64解码。
    也可以试试这个:
    sql="insertintoaccount·userdata(user、passwd)values(%s、%s)"cursor.execute(sql、(name、passwd-md5))试试这个,
    或者:sql="insertintoaccunt.userdata(user.passwd)values(%s%s)"%(name、passwd-md5)
    oursor.execute(sql)。

    python向mysql中插入数据提示错误?

    答:数据库本身是不支持字典类型的(已知的绝大多)
    方法有两种:
    1、把字典或者json格式数据作为字符串(string)直接插入、读取的时候再转为字典。
    2、为了避免某些字符、引号等转义问题发生、可以使用base64编码后导入数据库、读取时候再用base64解码。
    也可以试试这个:
    sql="insertintoaccount·userdata(user、passwd)values(%s、%s)"cursor.execute(sql、(name、passwd-md5))试试这个,
    或者:sql="insertintoaccunt.userdata(user.passwd)values(%s%s)"%(name、passwd-md5)
    oursor.execute(sql)。

    python调用第三方api接口写入数据库

    在Python中调用第三方 API 接口并将数据写入数据库可分为以下几个步骤:
    1.安装依赖库
    使用 requests 库发送 HTTP 请求,并使用 PyMySQL 库连接 MySQL 数据库。您可以使用以下命令在 Python 中安装这两个库:
    pip install requests
    pip install pymysql

    2.发送 API 请求
    使用 requests 库向第三方 API 发送请求,获取到需要存储到数据库的数据。
    例如,以下代码通过调用和风天气 API 获取天气数据:
    import requests
    r=requests.get('https://api.heweather.net/s6/weather/now?location=beijing&key=your_key')
    data = r.json() # 将请求的结果转换为JSON 格式数据

    3.处理 API 返回数据
    根据 API 返回的数据格式,提取需要存入数据库的字段数据。您可以使用字符串操作或 JsonPath 等库来提取数据。
    例如,以下代码从 API 返回数据中提取出温度(tmp)和湿度(hum)字段的值:
    tmp = data['HeWeather6'][0]['now']['tmp']
    hum = data['HeWeather6'][0]['now']['hum']

    4.连接数据库
    使用 PyMySQL 库连接 MySQL 数据库。请确保您已经安装 PyMySQL 库,并且数据库信息是正确的。
    例如,以下代码连接本地 MySQL 数据库:
    import pymysql
    conn =pymysql.connect(host='localhost', user='root', password='123456', db='my_db', charset='utf8mb4')

    5.将数据写入数据库
    使用 PyMySQL 库将数据写入数据库中。
    例如,以下代码将温度和湿度数据插入到 weather 表中:
    cursor = conn.cursor()
    # 表名:weather,字段:tmp、hum
    sql = "INSERT INTO weather (tmp, hum) VALUES (%s, %s)"
    # 插入数据
    try:
    cursor.execute(sql, (tmp, hum))
    conn.commit()
    print('数据插入成功!')
    except Exception as e:
    conn.rollback()
    print('数据插入失败!', e)
    cursor.close()
    conn.close()

    6.完整代码如下:
    import requests
    import pymysql

    # 发送 API 请求,获取天气数据
    r=requests.get('https://api.heweather.net/s6/weather/now?location=beijing&key=your_key')
    data = r.json()

    # 处理 API 返回数据,提取温度和湿度
    tmp = data['HeWeather6'][0]['now']['tmp']
    hum = data['HeWeather6'][0]['now']['hum']

    # 连接 MySQL 数据库
    conn = pymysql.connect(host='localhost', user='root', password='123456', db='my_db', charset='utf8mb4')

    # 将数据写入数据库
    cursor = conn.cursor()

    # 表名:weather,字段:tmp、hum
    sql = "INSERT INTO weather (tmp, hum) VALUES (%s, %s)"

    # 插入数据
    try:
    cursor.execute(sql, (tmp, hum))
    conn.commit()
    print('数据插入成功!')
    except Exception as e:
    conn.rollback()
    print('数据插入失败!', e)

    cursor.close()
    conn.close()
    在本例中,我们假设使用的是 MySQL 数据库,当然也可以使用其他类型的数据库,具体操作方式可能会略有不同,但是主要的操作步骤是类似的。

    python调用第三方api接口写入数据库

    在Python中调用第三方 API 接口并将数据写入数据库可分为以下几个步骤:
    1.安装依赖库
    使用 requests 库发送 HTTP 请求,并使用 PyMySQL 库连接 MySQL 数据库。您可以使用以下命令在 Python 中安装这两个库:
    pip install requests
    pip install pymysql

    2.发送 API 请求
    使用 requests 库向第三方 API 发送请求,获取到需要存储到数据库的数据。
    例如,以下代码通过调用和风天气 API 获取天气数据:
    import requests
    r=requests.get('https://api.heweather.net/s6/weather/now?location=beijing&key=your_key')
    data = r.json() # 将请求的结果转换为JSON 格式数据

    3.处理 API 返回数据
    根据 API 返回的数据格式,提取需要存入数据库的字段数据。您可以使用字符串操作或 JsonPath 等库来提取数据。
    例如,以下代码从 API 返回数据中提取出温度(tmp)和湿度(hum)字段的值:
    tmp = data['HeWeather6'][0]['now']['tmp']
    hum = data['HeWeather6'][0]['now']['hum']

    4.连接数据库
    使用 PyMySQL 库连接 MySQL 数据库。请确保您已经安装 PyMySQL 库,并且数据库信息是正确的。
    例如,以下代码连接本地 MySQL 数据库:
    import pymysql
    conn =pymysql.connect(host='localhost', user='root', password='123456', db='my_db', charset='utf8mb4')

    5.将数据写入数据库
    使用 PyMySQL 库将数据写入数据库中。
    例如,以下代码将温度和湿度数据插入到 weather 表中:
    cursor = conn.cursor()
    # 表名:weather,字段:tmp、hum
    sql = "INSERT INTO weather (tmp, hum) VALUES (%s, %s)"
    # 插入数据
    try:
    cursor.execute(sql, (tmp, hum))
    conn.commit()
    print('数据插入成功!')
    except Exception as e:
    conn.rollback()
    print('数据插入失败!', e)
    cursor.close()
    conn.close()

    6.完整代码如下:
    import requests
    import pymysql

    # 发送 API 请求,获取天气数据
    r=requests.get('https://api.heweather.net/s6/weather/now?location=beijing&key=your_key')
    data = r.json()

    # 处理 API 返回数据,提取温度和湿度
    tmp = data['HeWeather6'][0]['now']['tmp']
    hum = data['HeWeather6'][0]['now']['hum']

    # 连接 MySQL 数据库
    conn = pymysql.connect(host='localhost', user='root', password='123456', db='my_db', charset='utf8mb4')

    # 将数据写入数据库
    cursor = conn.cursor()

    # 表名:weather,字段:tmp、hum
    sql = "INSERT INTO weather (tmp, hum) VALUES (%s, %s)"

    # 插入数据
    try:
    cursor.execute(sql, (tmp, hum))
    conn.commit()
    print('数据插入成功!')
    except Exception as e:
    conn.rollback()
    print('数据插入失败!', e)

    cursor.close()
    conn.close()
    在本例中,我们假设使用的是 MySQL 数据库,当然也可以使用其他类型的数据库,具体操作方式可能会略有不同,但是主要的操作步骤是类似的。

    如何将从接口取到的json数据存入mysql数据库

    直接以json字符串像写其他普通字符串一样存到数据库就行了。没什么区别,只要选的数据库数据类型正确就可以

    如何将JSON,Text,XML,CSV 数据文件导入 MySQL

    将外部数据导入(import)数据库是在数据库应用中一个很常见的需求。其实这就是在数据的管理和操作中的ETL (Extract, transform, load)的L (Load)部分,也就是说,将特定结构(structure)或者格式(format)的数据导入某个目的地(比如数据库,这里我们讨论MySQL)。

    ETL Process

    本文要讨论的内容,是如何方便地将多种格式(JSON, Text, XML, CSV)的数据导入MySQL之中。

    本文大纲:

    将Text文件(包括CSV文件)导入MySQL
    将XML文件导入MySQL
    将JSON文件导入MySQL
    使用MySQL workbench的Table Data Export and Import Wizard进行JSON或CSV文件的导入导出

    1. 将Text文件(包括CSV文件)导入MySQL

    这里我们的讨论是基于一个假定,Text file和CSV file是有着比较规范的格式的(properly formatted),比如说每行的每个数据域(field)之间是由一个共同的分隔符(比如tab: \t)分隔的。

    那么首先,你需要根据你的数据的格式(有哪些域),来设计好数据库的对应的表 (的Schema)。

    举个例子,要处理的Text文件或者CSV文件是以\t作为分隔符的,每行有id, name, balance这么三个数据域,那么首先我们需要在数据库中创建这个表:

    CREATE TABLE sometable(id INT, name VARCHAR(255), balance DECIMAL(8,4));

    创建成功以后就可以导入了。操作方式很简单:

    LOAD DATA LOCAL INFILE '你的文件路径(如~/file.csv)' INTO TABLE sometable FIELDS TERMINATED BY '\t' [ENCLOSED BY '"'(可选)] LINES TERMINATED BY '\n' (id, name, balance)

    这里要注意的是,我们需要开启local-infile这个MySQL的配置参数,才能够成功导入。究其原因,从MySQL的Manual中可以看到这么一段话:

    LOCAL works only if your server and your client both have been configured to permit it. For example, if mysqld was started with --local-infile=0, LOCAL does not work. See Section 6.1.6, “Security Issues with LOAD DATA LOCAL”.

    这是MySQL出于安全考虑的默认配置。因此,我们需要在配置文件my.cnf中(以Debian发行版的Linux, 如Ubuntu为例, 即是在/etc/my.cnf中),确保:

    local-infile=1

    抑或是在命令行启动MySQL时加上--local-infile这一项:

    mysql --local-infile -uroot -pyourpwd yourdbname

    此外,我们也可以使用MySQL的一个官方导入程序mysqlimport ,这个程序本质上就是为LOAD DATA FILE提供了一个命令行的interface,很容易理解,我们这里就不再详述。

    2. 将XML文件导入MySQL

    这件事的完成方式,与我们的XML的形式有着很大的关系。

    举个例子说,当你的XML数据文件有着很非常规范的格式,比如:
    <?xml version="1.0"?>
    <row>
    <field name="id">1</field>
    <field name="name">Free</field>
    <field name="balance">2333.3333</field>
    </row>

    <row>
    <field name="id">2</field>
    <field name="name">Niki</field>
    <field name="balance">1289.2333</field>
    </row>

    或者
    <row column1="value1" column2="value2" .../>

    我们就可以很方便使用LOAD XML来导入,这里可以参见MySQL的官方手册--LOAD XML Syntax。

    然而我们可能有另外一些需求,比如说,我们可能会想要将XML文件的域映射到不同名字的列(TABLE COLUMN)之中。这里要注意,MySQL v5.0.7以后,MySQL的Stored Procere中不能再运行LOAD XML INFILE 或者LOAD DATA INFILE。所以转换的程序(procere)的编写方式与在此之前有所不同。这里,我们需要使用Load_File()和ExtractValue()这两个函数。

    以下是一个示例XML文件和程序:
    文件:
    <?xml version="1.0"?>
    <some_list>
    <someone id="1" fname="Rob" lname="Gravelle"/>
    <someone id="2" fname="Al" lname="Bundy"/>
    <someone id="3" fname="Little" lname="Richard"/>
    </some_list>

    程序:
    DELIMITER $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `import_some_xml`(path varchar(255), node varchar(255))
    BEGIN
    declare xml_content text;
    declare v_row_index int unsigned default 0;
    declare v_row_count int unsigned;
    declare v_xpath_row varchar(255);

    set xml_content = load_file(path);

    -- calculate the number of row elements.
    set v_row_count = extractValue(xml_content, concat('count(', node, ')'));

    -- loop through all the row elements
    while v_row_index < v_row_count do
    set v_row_index = v_row_index + 1;
    set v_xpath_row = concat(node, '[', v_row_index, ']/@*');
    insert into applicants values (
    extractValue(xml_content, concat(v_xpath_row, '[1]')),
    extractValue(xml_content, concat(v_xpath_row, '[2]')),
    extractValue(xml_content, concat(v_xpath_row, '[3]'))
    );
    end while;
    END

    在MySQL中,使用它进行导入:

    call import_some_xml('你的XML文件路径', '/some_list/someone');

    程序相当的直白,只要了解一下MySQL的脚本编写即可。

    这里提一下DELIMITER $$。我们知道MySQL的命令分隔符默认为分号,然而脚本中很显然是有分号的,但是我们并不希望立即执行,所以我们需要临时更改分隔符。

    3. 将JSON文件导入MySQL

    如何将JSON文件导入MySQL中,是一个很有趣的话题。JSON是一种现在相当常用的文件结构,所以掌握它的导入具有比较广泛的意义。

    很多时候,我们处理的JSON数据是以如下形式出现的:
    {"name":"Julia","gender":"female"}
    {"name":"Alice","gender":"female"}
    {"name":"Bob","gender":"male"}
    {"name":"Julian","gender":"male"}

    而并不是规整的[{},{},{},{}](一些NoSQL数据库的Export)。

    这样的形势对于载入有一个好处:因为每一行是一个JSON Object,所以我们便可以按行处理此文件,而不需要因为JSON的严格结构将整个文件(比如一个许多G的.json文件)全部载入。

    方式一 使用common-schema

    common-schema是一个应用很广泛的MySQL的框架,它有着很丰富的功能和详细的文档。我们可以使用它的JSON解析的功能。(它还具有JSON转换成XML等等方便的功能)

    具体说来,将common-schema导入之后,使用它的extract_json_value函数即可。源码中:
    create function extract_json_value(
    json_text text charset utf8,
    xpath text charset utf8
    ) returns text charset utf8

    该函数接受两个参数,一个是json_text,表示json文件的内容,另一个是xpath,表示数据的结构(这里可以类比XML文件的处理)。很多读者应该知道,XPath是用来对XML中的元素进行定位的,这里也可以作一样的理解。

    以本段开始的几行JSON为例,这里common-schema的使用如下例:
    select common_schema.extract_json_value(f.event_data,'/name') as name, common_schema.extract_json_value(f.event_data,'/gender') as gender, sum(f.event_count) as event_count from json_event_fact f group by name, gender;

    关于event_data,我们需要先理解LOAD DATA INFILE是一个event,不同的event type对应不同的event data。这部分知识可以参看Event Data for Specific Event Types

    如果感兴趣,可以参看其源码。参看一个受到广泛使用的项目的源码,对于自身成长是很有益的。

    当然了,我们也可以像之前处理XML文件导入一样,自己编写程序。这里便不再给出实例程序,有兴趣的读者可以自行编写或者跟笔者交流。

    方式二 使用mysqljsonimport

    这是Anders Karlsson的一个完成度很高的作品。这一份程序由C写成。它依赖于一个JSON Parser,Jansson。他们都有着比较好的维护和文档,所以使用上体验很好。

    mysqljsonimport的下载在SourceForge上。具体使用参照其文档即可。

    为了方便不熟悉源码安装的朋友,笔者在这里提一下安装流程和注意事项。
    安装命令顺序如下:
    $ wget http://sourceforge.net/projects/mysqljson/files/myjsonimport_1.6/mysqljsonimport-1.6.tar.gz
    $ tar xvfz mysqljsonimport-1.6.tar.gz
    $ cd mysqljsonimport-1.6
    $ ./configure –-with-mysql=/xxx/mysql
    $ make
    $ make check
    $ sudo make install

    --with-mysql这一步不是必要的,只要你安装的mysql的路径是系统的默认路径。很关键的,而且很容易被不熟悉的朋友忽略的是,这一个C程序要成功编译和运行,是需要MySQL的C API的,所以需要安装的依赖,除了jansson,还有libmysqlclient-dev。

    jansson的安装就是简单的源码安装,libmysqlclient-dev则可以使用包管理工具(比如ubuntu中使用apt-get即可;编译和安装前,建议先sudo apt-get update以避免不必要的麻烦)。

    导入命令:
    $ ./mysqljsonimport –-database test –-table tablename jsonfilename

    还有一个parser,作者是Kazuho,感兴趣的读者可以参看一下,他的相关博文是mysql_json - a MySQL UDF for parsing JSON ,github项目是mysql_json。

    4. 使用MySQL workbench

    Workbench这个工具对于许多不熟悉SQL语言或者命令行的朋友还是很方便和友好的。利用它,可以方便地导入和导出CSV和JSON文件。

    具体操作图例参见MySQL官方手册即可:Table Data Export and Import Wizard,这里不再赘述。

    文/freenik(简书作者)
    原文链接:http://www.jianshu.com/p/d330edb61fe2

    如何将JSON,Text,XML,CSV 数据文件导入 MySQL

    将外部数据导入(import)数据库是在数据库应用中一个很常见的需求。其实这就是在数据的管理和操作中的ETL (Extract, transform, load)的L (Load)部分,也就是说,将特定结构(structure)或者格式(format)的数据导入某个目的地(比如数据库,这里我们讨论MySQL)。

    ETL Process

    本文要讨论的内容,是如何方便地将多种格式(JSON, Text, XML, CSV)的数据导入MySQL之中。

    本文大纲:

    将Text文件(包括CSV文件)导入MySQL
    将XML文件导入MySQL
    将JSON文件导入MySQL
    使用MySQL workbench的Table Data Export and Import Wizard进行JSON或CSV文件的导入导出

    1. 将Text文件(包括CSV文件)导入MySQL

    这里我们的讨论是基于一个假定,Text file和CSV file是有着比较规范的格式的(properly formatted),比如说每行的每个数据域(field)之间是由一个共同的分隔符(比如tab: \t)分隔的。

    那么首先,你需要根据你的数据的格式(有哪些域),来设计好数据库的对应的表 (的Schema)。

    举个例子,要处理的Text文件或者CSV文件是以\t作为分隔符的,每行有id, name, balance这么三个数据域,那么首先我们需要在数据库中创建这个表:

    CREATE TABLE sometable(id INT, name VARCHAR(255), balance DECIMAL(8,4));

    创建成功以后就可以导入了。操作方式很简单:

    LOAD DATA LOCAL INFILE '你的文件路径(如~/file.csv)' INTO TABLE sometable FIELDS TERMINATED BY '\t' [ENCLOSED BY '"'(可选)] LINES TERMINATED BY '\n' (id, name, balance)

    这里要注意的是,我们需要开启local-infile这个MySQL的配置参数,才能够成功导入。究其原因,从MySQL的Manual中可以看到这么一段话:

    LOCAL works only if your server and your client both have been configured to permit it. For example, if mysqld was started with --local-infile=0, LOCAL does not work. See Section 6.1.6, “Security Issues with LOAD DATA LOCAL”.

    这是MySQL出于安全考虑的默认配置。因此,我们需要在配置文件my.cnf中(以Debian发行版的Linux, 如Ubuntu为例, 即是在/etc/my.cnf中),确保:

    local-infile=1

    抑或是在命令行启动MySQL时加上--local-infile这一项:

    mysql --local-infile -uroot -pyourpwd yourdbname

    此外,我们也可以使用MySQL的一个官方导入程序mysqlimport ,这个程序本质上就是为LOAD DATA FILE提供了一个命令行的interface,很容易理解,我们这里就不再详述。

    2. 将XML文件导入MySQL

    这件事的完成方式,与我们的XML的形式有着很大的关系。

    举个例子说,当你的XML数据文件有着很非常规范的格式,比如:
    <?xml version="1.0"?>
    <row>
    <field name="id">1</field>
    <field name="name">Free</field>
    <field name="balance">2333.3333</field>
    </row>

    <row>
    <field name="id">2</field>
    <field name="name">Niki</field>
    <field name="balance">1289.2333</field>
    </row>

    或者
    <row column1="value1" column2="value2" .../>

    我们就可以很方便使用LOAD XML来导入,这里可以参见MySQL的官方手册--LOAD XML Syntax。

    然而我们可能有另外一些需求,比如说,我们可能会想要将XML文件的域映射到不同名字的列(TABLE COLUMN)之中。这里要注意,MySQL v5.0.7以后,MySQL的Stored Procere中不能再运行LOAD XML INFILE 或者LOAD DATA INFILE。所以转换的程序(procere)的编写方式与在此之前有所不同。这里,我们需要使用Load_File()和ExtractValue()这两个函数。

    以下是一个示例XML文件和程序:
    文件:
    <?xml version="1.0"?>
    <some_list>
    <someone id="1" fname="Rob" lname="Gravelle"/>
    <someone id="2" fname="Al" lname="Bundy"/>
    <someone id="3" fname="Little" lname="Richard"/>
    </some_list>

    程序:
    DELIMITER $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `import_some_xml`(path varchar(255), node varchar(255))
    BEGIN
    declare xml_content text;
    declare v_row_index int unsigned default 0;
    declare v_row_count int unsigned;
    declare v_xpath_row varchar(255);

    set xml_content = load_file(path);

    -- calculate the number of row elements.
    set v_row_count = extractValue(xml_content, concat('count(', node, ')'));

    -- loop through all the row elements
    while v_row_index < v_row_count do
    set v_row_index = v_row_index + 1;
    set v_xpath_row = concat(node, '[', v_row_index, ']/@*');
    insert into applicants values (
    extractValue(xml_content, concat(v_xpath_row, '[1]')),
    extractValue(xml_content, concat(v_xpath_row, '[2]')),
    extractValue(xml_content, concat(v_xpath_row, '[3]'))
    );
    end while;
    END

    在MySQL中,使用它进行导入:

    call import_some_xml('你的XML文件路径', '/some_list/someone');

    程序相当的直白,只要了解一下MySQL的脚本编写即可。

    这里提一下DELIMITER $$。我们知道MySQL的命令分隔符默认为分号,然而脚本中很显然是有分号的,但是我们并不希望立即执行,所以我们需要临时更改分隔符。

    3. 将JSON文件导入MySQL

    如何将JSON文件导入MySQL中,是一个很有趣的话题。JSON是一种现在相当常用的文件结构,所以掌握它的导入具有比较广泛的意义。

    很多时候,我们处理的JSON数据是以如下形式出现的:
    {"name":"Julia","gender":"female"}
    {"name":"Alice","gender":"female"}
    {"name":"Bob","gender":"male"}
    {"name":"Julian","gender":"male"}

    而并不是规整的[{},{},{},{}](一些NoSQL数据库的Export)。

    这样的形势对于载入有一个好处:因为每一行是一个JSON Object,所以我们便可以按行处理此文件,而不需要因为JSON的严格结构将整个文件(比如一个许多G的.json文件)全部载入。

    方式一 使用common-schema

    common-schema是一个应用很广泛的MySQL的框架,它有着很丰富的功能和详细的文档。我们可以使用它的JSON解析的功能。(它还具有JSON转换成XML等等方便的功能)

    具体说来,将common-schema导入之后,使用它的extract_json_value函数即可。源码中:
    create function extract_json_value(
    json_text text charset utf8,
    xpath text charset utf8
    ) returns text charset utf8

    该函数接受两个参数,一个是json_text,表示json文件的内容,另一个是xpath,表示数据的结构(这里可以类比XML文件的处理)。很多读者应该知道,XPath是用来对XML中的元素进行定位的,这里也可以作一样的理解。

    以本段开始的几行JSON为例,这里common-schema的使用如下例:
    select common_schema.extract_json_value(f.event_data,'/name') as name, common_schema.extract_json_value(f.event_data,'/gender') as gender, sum(f.event_count) as event_count from json_event_fact f group by name, gender;

    关于event_data,我们需要先理解LOAD DATA INFILE是一个event,不同的event type对应不同的event data。这部分知识可以参看Event Data for Specific Event Types

    如果感兴趣,可以参看其源码。参看一个受到广泛使用的项目的源码,对于自身成长是很有益的。

    当然了,我们也可以像之前处理XML文件导入一样,自己编写程序。这里便不再给出实例程序,有兴趣的读者可以自行编写或者跟笔者交流。

    方式二 使用mysqljsonimport

    这是Anders Karlsson的一个完成度很高的作品。这一份程序由C写成。它依赖于一个JSON Parser,Jansson。他们都有着比较好的维护和文档,所以使用上体验很好。

    mysqljsonimport的下载在SourceForge上。具体使用参照其文档即可。

    为了方便不熟悉源码安装的朋友,笔者在这里提一下安装流程和注意事项。
    安装命令顺序如下:
    $ wget http://sourceforge.net/projects/mysqljson/files/myjsonimport_1.6/mysqljsonimport-1.6.tar.gz
    $ tar xvfz mysqljsonimport-1.6.tar.gz
    $ cd mysqljsonimport-1.6
    $ ./configure –-with-mysql=/xxx/mysql
    $ make
    $ make check
    $ sudo make install

    --with-mysql这一步不是必要的,只要你安装的mysql的路径是系统的默认路径。很关键的,而且很容易被不熟悉的朋友忽略的是,这一个C程序要成功编译和运行,是需要MySQL的C API的,所以需要安装的依赖,除了jansson,还有libmysqlclient-dev。

    jansson的安装就是简单的源码安装,libmysqlclient-dev则可以使用包管理工具(比如ubuntu中使用apt-get即可;编译和安装前,建议先sudo apt-get update以避免不必要的麻烦)。

    导入命令:
    $ ./mysqljsonimport –-database test –-table tablename jsonfilename

    还有一个parser,作者是Kazuho,感兴趣的读者可以参看一下,他的相关博文是mysql_json - a MySQL UDF for parsing JSON ,github项目是mysql_json。

    4. 使用MySQL workbench

    Workbench这个工具对于许多不熟悉SQL语言或者命令行的朋友还是很方便和友好的。利用它,可以方便地导入和导出CSV和JSON文件。

    具体操作图例参见MySQL官方手册即可:Table Data Export and Import Wizard,这里不再赘述。

    文/freenik(简书作者)
    原文链接:http://www.jianshu.com/p/d330edb61fe2

    显示全文