python3连接mysql数据库_python3 实现mysql数据库连接池

#!/usr/bin/env python

#-*- coding:utf-8 -*-import pymysql, os, configparserfrompymysql.cursors import DictCursorfromDBUtils.PooledDB import PooledDBclass Config(object):""" # Config().get_content("user_information")

配置文件里面的参数

[notdbMysql]

host= 192.168.1.101port= 3306user=root

password=python123"""def __init__(self, config_filename="myProjectConfig.cnf"):

file_path=os.path.join(os.path.dirname(__file__), config_filename)

self.cf=configparser.ConfigParser()

self.cf.read(file_path)

def get_sections(self):returnself.cf.sections()

def get_options(self, section):returnself.cf.options(section)

def get_content(self, section):

result={}for option inself.get_options(section):

value= self.cf.get(section, option)

result[option]= int(value) if value.isdigit() elsevaluereturnresultclass BasePymysqlPool(object):

def __init__(self, host, port, user, password, db_name=None):

self.db_host=host

self.db_port= int(port)

self.user=user

self.password=str(password)

self.db=db_name

self.conn=None

self.cursor=NoneclassMyPymysqlPool(BasePymysqlPool):""" MYSQL数据库对象,负责产生数据库连接 , 此类中的连接采用连接池实现获取连接对象:conn =Mysql.getConn()

释放连接对象;conn.close()或del conn"""# 连接池对象

__pool=None

def __init__(self, conf_name=None):

self.conf=Config().get_content(conf_name)

super(MyPymysqlPool, self).__init__(**self.conf)

# 数据库构造函数,从连接池中取出连接,并生成操作游标

self._conn=self.__getConn()

self._cursor=self._conn.cursor()

def __getConn(self):"""@summary: 静态方法,从连接池中取出连接

@return MySQLdb.connection""" if MyPymysqlPool.__pool isNone:

__pool= PooledDB(creator=pymysql,

mincached=1,

maxcached=20,

host=self.db_host,

port=self.db_port,

user=self.user,

passwd=self.password,

db=self.db,

use_unicode=False,

charset="utf8",

cursorclass=DictCursor)return__pool.connection()

def getAll(self, sql, param=None):"""@summary: 执行查询,并取出所有结果集

@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来

@param param: 可选参数,条件列表值(元组/列表)

@return: result list(字典对象)/boolean 查询到的结果集""" if param isNone:

count=self._cursor.execute(sql)else:

count=self._cursor.execute(sql, param)if count > 0:

result=self._cursor.fetchall()else:

result=Falsereturnresult

def getOne(self, sql, param=None):"""@summary: 执行查询,并取出第一条

@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来

@param param: 可选参数,条件列表值(元组/列表)

@return: result list/boolean 查询到的结果集""" if param isNone:

count=self._cursor.execute(sql)else:

count=self._cursor.execute(sql, param)if count > 0:

result=self._cursor.fetchone()else:

result=Falsereturnresult

def getMany(self, sql, num, param=None):"""@summary: 执行查询,并取出num条结果

@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来

@param num:取得的结果条数

@param param: 可选参数,条件列表值(元组/列表)

@return: result list/boolean 查询到的结果集""" if param isNone:

count=self._cursor.execute(sql)else:

count=self._cursor.execute(sql, param)if count > 0:

result=self._cursor.fetchmany(num)else:

result=Falsereturnresult

def insertMany(self, sql, values):"""@summary: 向数据表插入多条记录

@param sql:要插入的SQL格式

@param values:要插入的记录数据tuple(tuple)/list[list]

@return: count 受影响的行数""" count =self._cursor.executemany(sql, values)returncount

def __query(self, sql, param=None):if param isNone:

count=self._cursor.execute(sql)else:

count=self._cursor.execute(sql, param)returncount

def update(self, sql, param=None):"""@summary: 更新数据表记录

@param sql: SQL格式及条件,使用(%s,%s)

@param param: 要更新的 值 tuple/list

@return: count 受影响的行数""" returnself.__query(sql, param)

def insert(self, sql, param=None):"""@summary: 更新数据表记录

@param sql: SQL格式及条件,使用(%s,%s)

@param param: 要更新的 值 tuple/list

@return: count 受影响的行数""" returnself.__query(sql, param)

def delete(self, sql, param=None):"""@summary: 删除数据表记录

@param sql: SQL格式及条件,使用(%s,%s)

@param param: 要删除的条件 值 tuple/list

@return: count 受影响的行数""" returnself.__query(sql, param)

def begin(self):"""@summary: 开启事务""" self._conn.autocommit(0)

def end(self, option='commit'):"""@summary: 结束事务""" if option == 'commit':

self._conn.commit()else:

self._conn.rollback()

def dispose(self, isEnd=1):"""@summary: 释放连接池资源""" if isEnd == 1:

self.end('commit')else:

self.end('rollback')

self._cursor.close()

self._conn.close()if __name__ == '__main__':

mysql= MyPymysqlPool("notdbMysql")

sqlAll= "select * from myTest.aa;"result=mysql.getAll(sqlAll)

print(result)

sqlAll= "select * from myTest.aa;"result= mysql.getMany(sqlAll, 2)

print(result)

result=mysql.getOne(sqlAll)

print(result)

# mysql.insert("insert into myTest.aa set a=%s", (1))

# 释放资源

mysql.dispose()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值