Python數據庫訪問公共組件及模擬Http請求

前言python

  最近一段時間除了忙於工做以外,在業餘時,迷上了python,對它的跨平臺深深的吸引。通過一段時間的自我學習,瞭解了其基本的語法,便開始本身着手擺弄起來。主要想把之前對接的接口再實現一次,以便於在作中發現問題,解決問題。只看不作,沒有實際的操練,永遠都是紙上談兵。在此過程當中遇到了許多問題,經過不斷查詢資料和請教基本完善了功能。現將自我以爲比較重要的部分拿出來和你們一塊兒探討一下,也順便本身對此作個記錄!mysql

模擬Http請求sql

  在請求別人接口時,咱們最常使用的是模擬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數據庫訪問類json

  因爲使用.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)

  這裏我使用了配置文件,便於後期管理,其實說白了,也就是一個數組。直接上配置  app

configs_mysql={

   'host':'ip地址',

   'user':'帳號',

   'password':'密碼',

   'database':'數據庫',

   'port':端口號

}

其餘比較重要的訪問類函數

  xml和json相互轉化:post

# 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,加油!

相關文章
相關標籤/搜索