Python数据库访问公共组件及模拟Http请求

时间:2021-07-10 00:26:42

前言

  最近一段时间除了忙于工作之外,在业余时,迷上了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.connector class 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 0
self.cursor.execute(sql,parameters)
self.connector.commit()
return self.cursor.rowcount
except 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 0
self.cursor.executemany(sql,parameters)
self.connector.commit()
return self.cursor.rowcount
except 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 0
self.cursor.execute(sql,parameters)
allcount=self.cursor.rowcount
list=None
if size!=0:
list= self.cursor.fetchmany(size)
else:
list= self.cursor.fetchall()
return list,allcount
except 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,加油!

Python数据库访问公共组件及模拟Http请求的更多相关文章

  1. Python数据库访问之SQLite3、Mysql

    Python数据库访问之SQLite3.Mysql 现有的数据库管理系统有很多种,本文选择介绍两种DBMS:SQLite 3 和 Mysql. SQLite 3 SQLite 3是Python 3预装 ...

  2. python数据库访问

    取得rs,使用,报错 sqlite3.Cursor' object has no attribute '__getitem__' 原因:使用时conn已经关闭了. 解决:用fetchall取出传递回来 ...

  3. SpringBoot2 整合OAuth2组件,模拟第三方授权访问

    本文源码:GitHub·点这里 || GitEE·点这里 一.模式描述 授权服务 验证第三方服务的身份,验证邮箱用户的身份,记录和管理认证Token,为资源服务器提供Token校验.场景:第三方网站借 ...

  4. &period;net单元测试——常用测试方式(异常模拟、返回值测试、参数测试、数据库访问代码测试)

    最近在看.net单元测试艺术,我也喜欢单元测试,今天介绍一下如何测试异常.如何测试返回值.如何测试模拟对象的参数传递.如何测试数据库访问代码.单元测试框架使用的是NUnit,模拟框架使用的是:Rhin ...

  5. SQL Server 阻止了对组件 &&num;39&semi;Ad Hoc Distributed Queries&&num;39&semi; 的 STATEMENT&&num;39&semi;OpenRowset&sol;OpenDatasource&&num;39&semi; 的访问 (也就是跨数据库访问出错)

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  6. Python爬虫笔记【一】模拟用户访问之设置请求头 (1)

    学习的课本为<python网络数据采集>,大部分代码来此此书. 网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行.所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人 ...

  7. DataAccess通用数据库访问类,简单易用,功能强悍

    以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...

  8. springcloud&lpar;四&rpar;:Eureka客户端公共组件打包方式

    ,      一.前言  各位大佬应该知道,在大型项目中都需要有数据传输层,一般项目都采用的是MVC结构,如果有10个表,则会创建10个实体类,在各个层之间应该使用实体类传递数据: 在微服架构中,也许 ...

  9. 架构-数据库访问-SQL语言进行连接数据库服务器-DAO:DAO

    ylbtech-架构-数据库访问-SQL语言进行连接数据库服务器-DAO:DAO DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft ...

随机推荐

  1. 边工作边刷题:70天一遍leetcode&colon; day 1

    (今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted ...

  2. macbook上实现MacOS&plus;Windows8&plus;Ubuntu三系统

    至于为什么要装win和linux就不说了,本文只解释安装过程. GPT vs MBR MacOS下装另外两个系统的一个基本问题是:硬盘使用GPT分区,它和常见的MBR分区是两个硬盘分区方式. 它们的主 ...

  3. ubuntu14&period;04配置中文latex完美环境(texlive&plus;texmaker&plus;lyx&rpar;

    Ubuntu下的文档编辑虽然有libreoffice,但对中文和公式的排版始终不如ms office,因此要想写出高质量的文档,只能靠latex了,现在随着xeCjk的开发,中文文档在ubuntu下的 ...

  4. Session的工作机制详解和安全性问题(PHP实例讲解)

    我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...

  5. 【算法Everyday】第一日 二叉查找树转双向链表

    算法题目链接:http://bbs.csdn.net/topics/350093707 题目 // 1.把二元查找树转变成排序的双向链表 // 题目: // 输入一棵二元查找树,将该二元查找树转换成一 ...

  6. javascript touch事件

    touchstart : 當手指觸摸屏幕時觸發:即使已經有一個手指放在了屏幕上也會觸發. touchmove : 當手指在屏幕上滑動時連續的觸發,在這個事件發生期間,商用preventDefault( ...

  7. H3C交换配置PBR最佳实践

    简要说明 PBR算是比较常用的功能,需要我们去掌握一下 配置步骤简要 配置BFD 配置track 配置acl 配置policy-based-route 在接口上面应用policy-based-rout ...

  8. Greenplum&plus;Hadoop学习笔记-14-定义数据库对象之创建与管理模式

    6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式: test ...

  9. hdu1281二分图匹配

    小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的"车",并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放, ...

  10. Virtualbox让kali虚拟机共享主机的无线网络连接

    今天在测试虚拟机下安装kali系统时,遇到一个问题,默认安装完kali系统后,虚拟机不能上网.虚拟机网络配置使用的是默认的网络地址转换(NAT)选项. 网上查了很多,都说使用NAT模式时虚拟机不用做任 ...