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.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>[email protected]</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,加油!

时间: 2024-10-18 17:24:34

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

C# 数据库访问公共类

Web.config配置 <appSettings> <!--数据连接字符串--> <add key="DbProviderType" value="Oracle" /> <add key="ConnectionString" value="Data Source=(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0

php curl模拟post请求提交数据

最近在做校园图书馆图书信息的采集程序,既然是图书馆图书的采集,肯定有提交搜索的页面,无非是post提交,让我想到了curl模拟提交,首先通过firebug进行抓包查询下post提交后的格式如下: txtWxlx=CN&hidWxlx=spanCNLx&txtPY=HZ&txtTm=%D2%F4%C0%D6&txtLx=%25&txtSearchType=1&nMaxCount=100&nSetPageSize=10&cSortFld=%D5%

公共的数据库访问访问类 SqlHelper.cs

/// <summary> /// 类说明:公共的数据库访问访问类 /// </summary> using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Collections; namespace DotNet.Utilities { /// <summary> /// 

设计模式在实际业务应用中的介绍之1——抽象工厂模式实现对数据库访问组件的封装

设计模式在实际业务应用中的介绍之1--抽象工厂模式实现对数据库访问组件的封装 基于C#打造的通用数据库访问组件 基于C#打造的通用数据库访问组件,完全支持开闭原则,设计上支持可扩展支持任意主流数据库,目前组件只实现了Oracle.MS SQL.MySQL三种库. 该组件实现简单.架构清晰,目前组件只包括5个类文件,兼容了三种数据库,组件实现采用了单例模式.工厂模式. 获取组件源码请入QQ群706224870,在群文件中下载.入群验证信息:codefc 下面简单描述下实现思路: 5个类文件如下:D

公共的数据库访问类(全面)

比较全面的数据库访问类 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Collections; namespace DotNet.Utilities { /// <summary> /// /// 此类为抽象类, /// 不允许实例化,在应用时直接调用即可 /// </summar

django之权限管理公共组件

公共组件使用 公共组件的基本搭建 在上一篇已经是学习如何搭建一个公共组件,可以拷贝到任何项目里面,实现权限的管理工作,今天再次学习下公共组件的使用 新建一个项目,并把公共组件拷贝到新项目中取,并且在setting中注册组件 中间件的注册 公共组件的配置管理 在中间件中,通过导入项目的setting文件,从里面导入变量信息,所以我们在setting里面设置了如下变量信息: # ############################## RBAC权限相关配置开始 #################

Python数据库编程

简介 在任何应用中,都需要持久化存储,一般有3种基础的存储机制:文件.数据库系统以及一些混合类型.这种混合类型包括现有系统上的API.ORM.文件管理器.电子表格.配置文件等.在了解数据库以及如何在Python中使用他们之前,首先需要知道数据库概念以及SQL语句. 底层存储 数据库通常使用文件系统作为基本的持久化存储,它可以是普通的操作系统文件.专用的操作系统文件,甚至是原始的磁盘分区. 用户接口 大多数数据库系统提供了命令行工具,可以使用其执行SQL语句或查询.此外还有一些GUI工具,使用命令

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

以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展datarow转实体类,也可以搭配dapper.net实现更强大的功能. /// <summary> /// 通用数据库访问类,支持多种数据库,无直接依赖某个数据库组件 /// 作者:左文俊 /// 日期:2016-6-3 /// </summary> public class DataAc

常用的数据库访问方式

ODBC(Open Database Connectivity): 是Microsoft公司开发和定义的一套数据库访问标准,称为开放数据库系统互联.ODBC提供了一种编程接口,可以使用一个ODBC应用程序访 问各种数据库管理系统,例如Access.MySQL.DB2.FoxPro.SQL Server和Oracle等,它是第一个使用SQL访问不同关系数据库的数据访问技术.使用ODBC应用程序能够通过单一的命令操纵不同的数据库,而开 发人员需要做的仅仅只是针对不同的应用加入相应的ODBC驱动. D