通过接口访问mysql数据库(使用mysql记录从url返回的http GET请求数据操作)
通过接口访问mysql数据库
使用mysql记录从url返回的http GET请求数据操作业务场景需求及实现逻辑分析
在业务中,我们经常会碰到需要用HTTP GET请求数据的情况,比如http请求返回的结果如下所示:
那么,如果我们想将这些数据用mysql存储下来,那该怎么实现呢?
其实,调用python的httplib和MySQLdb包将会非常容易实现,httplib负责获取url的返回,MySQLdb负责对MySQL数据库进行操作。下面整理了关系逻辑图:
那么,我们开始代码开发:
python依赖包准备
python需要用到的包至少有如下几个,其中MySQLdb依赖包的安装可以参考python安装mysql的依赖包mysql-python
|
# 此为python文本编辑器界面 #!/usr/bin/python # coding=utf-8 import httplib import json import time import MySQLdb |
用httplib获取url请求返回
httplib包支持如下的一些方法和函数:
|
url = "http://www.testtesttest.com/mobile/kit?token=yyyyyyyyy&key=tttttt&size=1" #具体的url链接 conn = httplib.HTTPConnection( "www.testtesttest.com" ) conn.request(method = "GET" , url = url) #指定GET方法,以及url对象 response = conn.getresponse() #创建response对象 res = response.read() #读取url返回的内容 # 使用json.loads方法将json解码为python对象 json_repose = json.loads(res) data = json_repose[ 'data' ] |
此时,http请求返回的所有信息都存在了对象res中,因为请求返回的是json字符串,上面我们采用了json.loads方法来解析。
可以留意到,最终我们将请求返回的json内容,都存到了python的对象中里,而一旦将数据转为数组或者元组等形式储存,我们就可以用python自带的函数对其进行解析或者其他操作了。
用python解析url请求返回的json
|
# 这里我们定义了一个函数用于解析json def data_list_analyze(i): data_dict = data[i] status = data_dict[ 'status' ] devi_id = data_dict[ 'devi_id' ] update_time = time.strftime( "%Y-%m-%d %H:%M:%S" , time.localtime(data_dict[ 'update_time' ])) actived_time = time.strftime( "%Y-%m-%d %H:%M:%S" , time.localtime(data_dict[ 'actived_time' ])) return devi_id, imei, device_type, actived_time |
python连接数据库并写入数据
接下来是数据库的连接示例:
|
# 打开数据库连接,指定数据库ip、用户名、密码、连接的库名 db = MySQLdb. connect ( "192.168.xxx.xxx" , "db_user" , "db_password" , "db_database" , charset= 'utf8' ) # 使用 cursor ()方法获取操作游标 cursor = db. cursor () # 建表sql语句 sql = "" "create table if not exists `gergsmart_list`( `devi_id` varchar(255) NOT NULL COMMENT 'IMEI, //硬件设备 IMEI', `imei` varchar(255) COMMENT 'ICCID,//硬件设备 SIM卡', `device_type` varchar(255) COMMENT '设备类型', `actived_time` datetime COMMENT '⾸次激活时间', PRIMARY KEY(`devi_id`) )ENGINE=INNODB DEFAULT CHARSET=utf8; " "" # 使用 execute 方法执行SQL语句,建表 cursor . execute (sql) # 插入数据sql语句 insert_sql = "insert into `gergsmart_list` \ (devi_id,imei,device_type,actived_time) \ values (%s, %s, %s, %s,)" |
从上面可以留意到,我们可以将python解析得到的对象devi_id、imei、device_type、actived_time,放入了mysql的插入语句中去,这样我们就实现了“从url获取数据,存到python对象中,再将python对象插入到mysql的记录中”这样的操作了。
总结,其实我们可以将python看作为一个中转器,接收url请求返回,并写入MySQL。而其中httplib负责了接收操作,MySQLdb负责了写入操作。
补充:mysql请求超时!延伸拓展至get post请求的区别是什么,超详细!一篇足矣解决所有!!
将数据库的连接地址从127.0.0.1改为localhost即可!亲测有效!!
查阅了很多的资料,归纳总结了get请求和post请求的区别
做了以下总结:
众所周知的是get请求的参数是直接暴露在url上面,安全性较低。post请求的参数是存放在body里面夹带过去,安全性较高一点。接下来我们看看稍微全面一点的解释
我们先看一下前辈们的解释
一、get和post请求的区别是什么:
get是从服务器上获取数据,post是向服务器传送数据。
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性非常低,post安全性较高。
GET 请求可被缓存 POST 请求不会被缓存
GET 请求保留在浏览器历史记录中 POST 请求不会保留在浏览器历史记录中
GET 请求可被收藏为书签 POST 不能被收藏为书签
GET请求只能进行url编码(application/x-www-form-urlencoded)POST支持多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。)
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
接下来参考一下官方的说法是什么:
二、在w3schools中也对二者进行了区分给出了官方的答案
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET产生一个TCP数据包;POST产生两个TCP数据包。
基于上述以及查阅的资料做一个总结
HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。 HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
post请求和get请求都是HTTP的请求方式,本质上来说并无区别,底层实现都是基于TCP/IP协议。但是请求有各种各样的方式,于是HTTP对请求方式进行了划分和规定,于是产生了get、post处理请求的分工和区别。
此外还有搜索到另外一个区别:GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
GET与POST都有自己的语义,不能随便混用。
据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
综述:
“GET方式提交的数据最多只能是1024字节”,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。
理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。对于ASP程序,Request对象处理每个表单域时存在100K的数据长度限制。但如果使用Request.BinaryRead则没有这个限制。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/IKnowNothinglee/article/details/90600509
- mysql索引失效原因(MySQL索引失效的几种情况详析)
- docker创建mysql环境(docker上部署MySQL的示例)
- MySQL执行事务的语法与流程详解(MySQL执行事务的语法与流程详解)
- mysql如何删除外键约束数据(MySQL中外键的创建、约束以及删除)
- phpstudymysql数据库启动不了(phpstudy mysql启动不了的解决方法)
- navicat连接mysql是远程连接吗(详解Navicat远程连接mysql很慢)
- pythonmysql使用教程(Python异步操作MySQL示例使用aiomysql)
- key的用法归纳mysql(详解mysql中explain的type)
- mysql子查询用法(MySQL 子查询和分组查询)
- mysqlcount使用技巧(MySQL巧用sum、case和when优化统计查询)
- mysql8.0查询操作(MySQL 8.0 redo log的深入解析)
- mysql中使用show table status 查看表信息
- mysql查看执行慢的sql(系统隐形杀手——阻塞与等待SQL)
- mysql批量生成uuid(一种简单的ID生成策略: Mysql表生成全局唯一ID的实现)
- mysql自增主键创建过程(深入谈谈MySQL中的自增主键)
- mysql索引的比较规则(MySQL的Flush-List和脏页的落盘机制)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
- 大女主 汤唯垂青电视圈,搭档朱亚文出演《大明皇妃孙若微传》(汤唯垂青电视圈)
- 红色代表什么(红色代表什么情感和含义)
- 高中数学题(高中数学题型总结及解题方法)
热门推荐
- 服务器启动nginx服务的命令(Nginx服务器添加Systemd自定义服务过程解析)
- 云服务器和普通服务器有什么区别(云服务器是什么?云服务器是如何工作的?)
- sql常见的聚合函数有哪些(SQL中的开窗函数详解可代替聚合函数使用)
- dockermysql实例(docker 连接宿主Mysql操作)
- 微信小程序多人编辑表格(微信小程序实现固定表头、列表格组件)
- ftp总是出现错误(FTP出现500 OOPS: cannot change directory的解决方法)
- css3支持多重背景吗(真正了解CSS3背景下的@font face规则)
- vue实现双向绑定原理(vue实现双向数据绑定)
- Ext.form.FieldSet的用法
- python表白代码演示(python3实现表白神器)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9