使用python 将post接口数据导入到MySQL中

需求:使用python将接口数据导入到MySQL中

        首先想到的是使用kettle将接口的数据导入到MySQL。

        大致流程如下:

        从kettle的组件中找到以下控件建立流程:

      

        配置控件的参数,如下

        

        生成记录控件:目的是为rest_client 做铺垫的

        url:就是访问的地址

        body:就是请求体

        request_method:就是请求的方法

        rest_client控件:将生成记录的参数添加进来。

        

        json 输入控件:目的是解析返回来的json数据,在字段的文本空中选择要 处理的数据,如下所示:

        表输入:目的是将数据流中的数据保存到数据库中。

        

        数据库连接:选择要同步的数据库和数据表。数据表中的地段最好和数据流中的字段对应。

        在数据库字段中 选择相对应的字段名,如下:

        

经过以上操作,就可以将post接口的数据存储到数据库中。

第二种方法:就是使用python将接口数据导入

代码展示如下:

from datetime import datetime

import requests
import pymysql

# 发起POST请求并处理数据
def process_post_data(url):
    # 发起POST请求
    headers = {'Content-Type': 'application/json'}
    response = requests.post(url,headers=headers,verify=False)

    if response.status_code == 200:
        # 解析响应数据
        data = response.json()

        # 提取数据字段
        vegetableBaskets = data['data']['vegetableBaskets']
        times = data['data']['names']
        grainOil = data['data']['grainOil']
        agricultures = data['data']['agricultures']


        # 连接到MySQL数据库
        conn = pymysql.connect(host="192.168.100.44",
                               port=23306,
                               user="root",
                               passwd="syyU!F$LhN@2023",
                               db="post")
        # 打开游标
        cursor = conn.cursor()


        try:
            # 删除表
            drop_table_query = "drop table if exists post_data"
            cursor.execute(drop_table_query)
            conn.commit()

            # 新建表
            create_table_query = """CREATE TABLE `post_data` (
              `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
              `vegetableBaskets` varchar(255) DEFAULT NULL COMMENT '蔬菜篮',
              `Times` datetime DEFAULT NULL COMMENT '时间',
              `grainOil` varchar(255) DEFAULT NULL COMMENT '谷物油',
              `agricultures` varchar(255) DEFAULT NULL COMMENT '农业',
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"""
            cursor.execute(create_table_query)
            conn.commit()

            print('删除,新建操作成功')

            # 执行插入数据的SQL语句
            insert_query = "INSERT INTO post_data (vegetableBaskets, Times, grainOil, agricultures) VALUES ( %s, %s, %s, %s)"

            # 执行插入操作
            for i in range(len(vegetableBaskets)):
                values = (vegetableBaskets[i], datetime.strptime(times[i], '%Y年%m月%d日'), grainOil[i], agricultures[i])
                cursor.execute(insert_query, values)

                cursor.execute(insert_query, values)
            # 执行操作
            conn.commit()
            print('Data inserted successfully.')
        except Exception as e:
            conn.rollback()
            print('Error: {}'.format(str(e)))
        finally:
            # 关闭游标和连接
            cursor.close()
            conn.close()
    else:
        print('POST request failed with status code {}'.format(response.status_code))

# 示例调用
post_url = '你想访问的url'
process_post_data(post_url)

        一开始,在执行的时候会报一个错误,错误如下:

requests.exceptions.SSLError: HTTPSConnectionPool(host='ncpscxx.moa.gov.cn', port=443): Max retries exceeded with url: /product/common-price-index/getIndexList (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1125)')))

        解决办法:他这是代理证书的问题

         只需要将 response = requests.post(url,headers=headers)里面加上verify=False,

默认情况下,当你使用一个网络库(例如requests)发送HTTPS请求时,它会验证服务器的SSL证书,以确保与服务器之间的安全连接。这是一种安全的做法,因为它防止了中间人攻击和其他安全威胁。

然而,有时候你可能会遇到一些特殊情况,例如服务器的证书无效或无法验证,或者你想忽略证书验证以简化开发过程。在这些情况下,你可以使用verify=False参数选项来禁用证书验证。

不禁用证书的方法暂时还没有探究出来。

还会有以下的错误:

InsecureRequestWarning: Unverified HTTPS request is being made to host 'ncpscxx.moa.gov.cn'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  warnings.warn(
删除,新建操作成功
Data inserted successfully.

Process finished with exit code 0

这个错误的问题,不影响程序的运行

分析:urlib3 基于证书验证的级别出发不同的警告,比如说 InsecureRequestWarning ,没有验证的时候回出现这个警告。当然,未经验证的HTTPS URL时不被提倡的,如果你想强制取消警告,你可以使用 “disable_warnigns():

解决:你只需要在代码中加入以下代码

import urllib3
def test():
	urllib3.disable_warnings()

全部代码: 

from datetime import datetime

import requests
import pymysql
# urlib3 基于证书验证的级别出发不同的警告,比如说 InsecureRequestWarning ,没有验证的时候会出现这个警告。如果你想强制取消警告,你可以使用 “disable_warnigns():”加入下面代码
import urllib3
def test():
	urllib3.disable_warnings()

# 发起POST请求并处理数据
def process_post_data(url):
    # 发起POST请求
    headers = {'Content-Type': 'application/json'}
    response = requests.post(url,headers=headers,verify=False)

    if response.status_code == 200:
        # 解析响应数据
        data = response.json()

        # 提取数据字段
        vegetableBaskets = data['data']['vegetableBaskets']
        times = data['data']['names']
        grainOil = data['data']['grainOil']
        agricultures = data['data']['agricultures']


        # 连接到MySQL数据库
        conn = pymysql.connect(host="192.168.100.44",
                               port=23306,
                               user="root",
                               passwd="syyU!F$LhN@2023",
                               db="post")
        # 打开游标
        cursor = conn.cursor()


        try:
            # 删除表
            drop_table_query = "drop table if exists post_data"
            cursor.execute(drop_table_query)
            conn.commit()

            # 新建表
            create_table_query = """CREATE TABLE `post_data` (
              `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
              `vegetableBaskets` varchar(255) DEFAULT NULL COMMENT '蔬菜篮',
              `Times` datetime DEFAULT NULL COMMENT '时间',
              `grainOil` varchar(255) DEFAULT NULL COMMENT '谷物油',
              `agricultures` varchar(255) DEFAULT NULL COMMENT '农业',
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"""
            cursor.execute(create_table_query)
            conn.commit()

            print('删除,新建操作成功')

            # 执行插入数据的SQL语句
            insert_query = "INSERT INTO post_data (vegetableBaskets, Times, grainOil, agricultures) VALUES ( %s, %s, %s, %s)"

            # 执行插入操作
            for i in range(len(vegetableBaskets)):
                values = (vegetableBaskets[i], datetime.strptime(times[i], '%Y年%m月%d日'), grainOil[i], agricultures[i])
                cursor.execute(insert_query, values)

                cursor.execute(insert_query, values)
            # 执行操作
            conn.commit()
            print('Data inserted successfully.')
        except Exception as e:
            conn.rollback()
            print('Error: {}'.format(str(e)))
        finally:
            # 关闭游标和连接
            cursor.close()
            conn.close()
    else:
        print('POST request failed with status code {}'.format(response.status_code))

# 示例调用
if __name__ == '__main__':

    post_url = '你要访问的url'
    process_post_data(post_url)

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Python 的 Grafana API 和 MySQL Connector 来实现将 MySQL 数据数据呈现成 Grafana 图表的功能。以下是一个示例代码: ```python # 导入需要的库 import requests import mysql.connector # 设置 MySQL 连接参数 config = { 'user': 'your_username', 'password': 'your_password', 'host': 'your_host', 'database': 'your_database' } # 连接 MySQL 数据库 cnx = mysql.connector.connect(**config) # 查询 MySQL 数据 query = "SELECT * FROM your_table" cursor = cnx.cursor() cursor.execute(query) data = cursor.fetchall() # 格式化数据为 Grafana 所需的格式 series = [] for i, row in enumerate(data): series.append({"x": i, "y": row[1]}) # 根据实际情况修改这里的数据格式 # 设置 Grafana API 地址和请求头 url = 'http://your_grafana_url/api/datasources/proxy/1/query' headers = { 'Authorization': 'Bearer your_grafana_api_key', 'Content-Type': 'application/json' } # 构造 Grafana API 请求参数 data = { "from": "now-1h", "to": "now", "targets": [ { "target": "your_target_name", "datapoints": series } ] } # 发送 Grafana API 请求 response = requests.post(url, headers=headers, json=data) # 输出 Grafana API 响应结果 print(response.json()) # 关闭 MySQL 连接 cnx.close() ``` 上述代码,需要替换以下参数: - `your_username`:MySQL 数据库的用户名 - `your_password`:MySQL 数据库的密码 - `your_host`:MySQL 数据库的主机地址 - `your_database`:MySQL 数据库的名称 - `your_table`:MySQL 数据的表名 - `your_grafana_url`:Grafana API 的地址 - `your_grafana_api_key`:Grafana API 的认证密钥 - `your_target_name`:Grafana 的目标名称 在运行代码之前,需要安装以下依赖库: - `requests` - `mysql-connector-python` 安装方式: ```bash pip install requests mysql-connector-python ``` 如果以上步骤都完成了,你就可以通过运行上述代码,将 MySQL 数据数据呈现成 Grafana 图表了!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值