Python数据库访问公共组件及模拟Http请求
前言
最近一段时间除了忙于工作之外,在业余时,迷上了python,对它的跨平台深深的吸引。经过一段时间的自我学习,了解了其基本的语法,便开始自己着手摆弄起来。主要想把以前对接的接口再实现一次,以便于在做中发现问题,解决问题。只看不做,没有实际的操练,永远都是纸上谈兵。在此过程中遇到了许多问题,通过不断查询资料和请教基本完善了功能。现将自我觉得比较重要的部分拿出来和大家一起探讨一下,也顺便自己对此做个记录!
模拟Http请求
在请求别人接口时,我们最常使用的是模拟Http请求。在python中有许多方式,我选用了新版的httplib2。有兴趣的可以查看一下其他文档。
# encoding: utf-8 __author__ = 'changyang' ''' @author: changyang @software: PyCharm @file: httphelper.py @time: 2015/12/14 10:48 @function:http请求操作''' import httplib2,json#get def get(url):return handler(url,None,'GET')#post def post(url,data):return handler(url,data,'POST')#统一处理http函数 def handler(url,data,method):try:httpClient=httplib2.Http()headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}if data!=None:data=json.dumps(data)response,content=httpClient.request(uri=url,method=method,body=data,headers=headers)return content.decode('utf-8')except Exception as e:print(e)if __name__=='__main__':print('choice http method...')
Mysql数据库访问类
由于使用.net习惯了,还真不知道怎样描述,大家理解意思就行。是在不知道怎样说了,直接上代码。
# encoding: utf-8 __author__ = 'changyang' ''' @author: changyang @software: PyCharm @file: mysql_helper.py @time: 2015/12/24 16:15 @function:数据库访问帮助类 ''' import mysql.connectorclass MySqlHelper(object):def __init__(self,config_mysql):self.create_connector(config_mysql)#创建数据库连接def create_connector(self,config_mysql):try:self.connector= mysql.connector.connect(host=config_mysql['host'],user=config_mysql['user'],password=config_mysql['password'],database=config_mysql['database'],port=config_mysql['port'],charset='utf8',buffered=True)self.cursor=self.connector.cursor(buffered=True)except Exception as e:print('myql connector is error:%s' % e)#插入单条信息,parameters为元组,sql语句中的占位符必须与参数的顺序相同,且sql语句中以‘%s’进行占位def insert(self,sql,parameters):try:if sql==None or sql=='':return 0self.cursor.execute(sql,parameters)self.connector.commit()return self.cursor.rowcountexcept Exception as e:print('insert is error:%s' % e)finally:self.cursor.close()self.connector.close()#一次性插入多条数据,parameters为数组,每个元素都是一个元组,元组内容的顺序必须与sql语句中的占位符相同,且sql语句中以‘%s’进行占位def multiinsert(self,sql,parameters):try:if sql==None or sql=='':return 0self.cursor.executemany(sql,parameters)self.connector.commit()return self.cursor.rowcountexcept Exception as e:print('multiinsert is error:%s' % e)finally:self.cursor.close()self.connector.close()#分页查询,parameters为元组,sql语句中的占位符必须与参数的顺序相同,且sql语句中以‘%s’进行占位#可用于分页查询,但是需要在sql语句中进行分页def findlimit(self,sql,parameters,size):try:if sql==None or sql=='':return 0self.cursor.execute(sql,parameters)allcount=self.cursor.rowcountlist=Noneif size!=0:list= self.cursor.fetchmany(size)else:list= self.cursor.fetchall()return list,allcountexcept Exception as e:print('findlimit is error:%s' % e)finally:self.connector.commit()self.cursor.close()self.connector.close()#查询全部,parameters为元组,sql语句中的占位符必须与参数的顺序相同,且sql语句中以‘%s’进行占位def findall(self,sql,parameters):return self.findlimit(sql,parameters,0)
这里我使用了配置文件,便于后期管理,其实说白了,也就是一个数组。直接上配置
configs_mysql={'host':'ip地址','user':'账号','password':'密码','database':'数据库','port':端口号}
其他比较重要的访问类
xml和json相互转化:
# encoding: utf-8 __author__ = 'changyang' ''' @author: changyang @software: PyCharm @file: json_to_xml.py @time: 2015/12/15 9:57 @function:json转化为xml ''' import xmltodict,json#xml转化为json def xml_to_json(str):if str=='':raise 'str is null'str=xmltodict.parse(str)return json.dumps(str)#json转化为xml def json_to_xml(str):if str=='':raise 'str is null'str={'Ticket':json.loads(str)}return xmltodict.unparse(str,encoding='utf-8',full_document=True)if __name__=='__main__':xml = """ <student><stid>10213</stid><info><name>name</name><mail>xxx@xxx.com</mail><sex>male</sex></info><course><name>math</name><age>90</age></course><course><name>english</name><age>88</age></course> </student> """result=xml_to_json(xml)print(result)print(json_to_xml(result))
文件操作
# encoding: utf-8 __author__ = 'changyang' ''' @author: changyang @software: PyCharm @file: file_helper.py @time: 2015/12/15 8:49 @function:文件操作 ''' import sys,time,os,shutil#保存xml文件并写入内容 def save(path_type,filename,content):try:path=get_common_path(path_type)if not os.path.exists(path):os.makedirs(path)filename='%s\%s' % (path,filename)if os.path.exists(filename):os.remove(filename)with open(filename, "w",encoding='utf-8') as f:f.write(content)except Exception as e:print(e) #移除文件类型下的所有文件 def remove(path_type):try:path=get_common_path(path_type)if os.path.exists(path):shutil.rmtree(path,True)except Exception as e:print(e)#获取当前门票xml路径 def getpath(xml,path_type):return get_common_path(path_type,xml)
2015的最后总结
2015有许多未完成的,还有一些已经完成的。在自己生日这天,订了车,算是走出了第一步。此后一直坚持给母亲每个月打钱回去,开始存钱准备买房的艰辛道路。在这年中,还有许多该看的书未完成,还有许多值得提升的地方还在进行中。一直对数据比较感兴趣,所以最近一直在自学python。也许自己有一些底子,但只能说是触类旁通吧。还有待自己去多加实践。我是一个不善言辞的人,也不知道该说些什么,只是按照自己的目前,一步一步走下去的,相信不会让自己失望的。
2016,加油!
转载于:https://www.cnblogs.com/zcy-xy/p/5082092.html
Python数据库访问公共组件及模拟Http请求相关推荐
- Python数据库访问之SQLite3、Mysql
现有的数据库管理系统有很多种,本文选择介绍两种DBMS:SQLite 3 和 Mysql. SQLite 3 SQLite 3是Python 3预装的.相当完备.无需配置的基于SQL的数据库管理系统. ...
- Python爬虫学习之API与模拟ajax请求
API的使用 --通过API向服务器请求数据 优点:简单直接,高效率地批量爬取:解决动态网页的爬取. 缺点:通过API的缺点是有些网站会限制API调用的次数和频率,用户需要付费来升级成高级用户来获取更 ...
- SQLAPI数据库访问接口访问MySQL数据库
SQLAPI是一种比较方便的数据库访问接口组件,可以支持多种数据库接口的访问,详细信息可以访问www.sqlapi.com,有详细介绍.本文介绍的是在MFC中通过SQLAPI接口访问MySQL数据库的 ...
- PHP-Curl模拟HTTP请求
2019独角兽企业重金招聘Python工程师标准>>> 使用PHP-Curl方式模拟HTTP请求,测试接口传参和返回值状态 <?php/*** 模拟post进行url请求* @ ...
- SpringBoot2 整合OAuth2组件,模拟第三方授权访问
本文源码:GitHub·点这里 || GitEE·点这里 一.模式描述 授权服务 验证第三方服务的身份,验证邮箱用户的身份,记录和管理认证Token,为资源服务器提供Token校验.场景:第三方网站借 ...
- 【商业版】C# ASP.NET 通用权限管理系统组件源码中的数据库访问组件可以全面支持Access单机数据库了...
可能在5年前还用过Access单机数据库但是后来很少用了,可能平时接触的都是大型管理类系统的开发工作大部分是Oracle.SQLServer数据库上做开发的,很少做一些小网站或者单机版本的东西,所以跟 ...
- oracle存储sql片段引入_强大的跨数据库访问组件 UniDAC使用教程:注释和SQL函数...
Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi,C++Builder, La ...
- 公共数据库访问连接类
公共数据库访问连接类 顾名思义,公共数据库访问连接类有三个特点: 1.公共的,所以在该类中的所有方法都是静态的,因此直接调用类名即可,无须再实例化. 2.数据库访问,要访问数据库 3.连接类,所以有一 ...
- delphi 用MDAC微软数据库访问组件的dll动态库
delphi 用MDAC微软数据库访问组件的dll动态库 一.概念 MDAC(Microsoft Data Access Components)是微软数据库访问组件,Netpise和许多利用数据库的软 ...
最新文章
- Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式
- 浅谈ASP.NET的内部机制(一)
- 鸿蒙os内测版应用名称,鸿蒙OS2.0发布,只有两款机型可以申请内测
- CEO 赠书 | 打破创新神话,揭示创新本质
- 推荐算法炼丹笔记:序列化推荐算法SASRec
- 使用poi统计工作职责
- 使用Angular与TypeScript构建Electron应用(五)
- unity3d连接数据库
- php 连接 mysql 8.0
- Dvr的工作原理及入门分析
- sklearn 5.18.3 SGD - Maximum margin separating hyperplane
- 路飞学城Python-Day78
- GAN入门实例【个人理解】
- 那些普通人的价值观终究会害了你
- 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
- 两套系统同个服务器,同一服务器运行两套workerman程序有什么需要特别修改的吗...
- Ajax传JSON对象报错:JSON parse error: Unrecognized token ‘ids‘: was expecting (‘true‘, ‘false‘ or ‘null‘);
- 元宇宙大火的“天时、地利、人和”
- บาคาร่า ธุรกิจที่สร้างรายได้ดี
- layui使用表格数据,json嵌套数据解决