Python3PooledDB连接池参数解释以及连接常见数据库操作仅原⽂翻译以及⼀些个⼈理解
参数解释
1. creator:数据库驱动模块,如常见的pymysql,pymssql,cx_Oracle模块。⽆默认值
2. mincached:初始化连接池时创建的连接数。默认为0,即初始化时不创建连接。(建议默认0,假如⾮0的话,在某些数据库不可⽤
时,整个项⽬会启动不了)
3. maxcached:池中空闲连接的最⼤数量。默认为0,即⽆最⼤数量限制。(建议默认)
4. maxshared:池中共享连接的最⼤数量。默认为0,即每个连接都是专⽤的,不可共享(不常⽤,建议默认)
5. maxconnections:被允许的最⼤连接数。默认为0,⽆最⼤数量限制。(视情况⽽定)
6. blocking:连接数达到最⼤时,新连接是否可阻塞。默认Fal,即达到最⼤连接数时,再取新连接将会报错。(建议True,达到最⼤
连接数时,新连接阻塞,等待连接数减少再连接)
7. maxusage:连接的最⼤使⽤次数。默认0,即⽆使⽤次数限制。(建议默认)
8. tssion:可选的SQL命令列表,可⽤于准备会话。(例如设置时区)
9. ret:当连接返回到池中时,重置连接的⽅式。默认True,总是执⾏回滚。(不太清楚,建议默认)
10. ping:确定何时使⽤ping()检查连接。默认1,即当连接被取⾛,做⼀次ping操作。0是从不ping,1是默认,2是当该连接创建游标
时ping,4是执⾏sql语句时ping,7是总是ping
连接常见数据库
import importlib
from DBUtils.PooledDB import PooledDB
class DataBa(object):
def__init__(lf, db_type, config):
lf.__db_type = db_type
if lf.__db_type =='mysql':
db_creator = importlib.import_module('pymysql')
elif lf.__db_type =='sqlrver':
db_creator = importlib.import_module('pymssql')
elif lf.__db_type =='oracle':
db_creator = importlib.import_module('cx_Oracle')
el:
rai Exception('unsupported databa type '+ lf.__db_type) lf.pool = PooledDB(
creator=db_creator,
mincached=0,
maxcached=6,
maxconnections=0,
blocking=True,
ping=0,
**config
)
def execute_query(lf, sql, as_dict=True):
"""
查询语句
:param sql:
:param as_dict:
:return:
"""
conn =None
cur =None
try:
conn = tion()
cur = conn.cursor()
rst = cur.fetchall()
if rst:
if as_dict:
fields =[tup[0]for tup in cur._cursor.description]
return[dict(zip(fields, row))for row in rst]
return rst
return rst
except Exception as e:
print('sql:[{}]meet error'.format(sql))
print(e.args[-1])
return()
finally:
if conn:
conn.clo()
if cur:
cur.clo()
def execute_manay(lf, sql, data):
"""
执⾏多条语句
:param sql:
:param data:
:return:
"""
conn =None
cur =None
try:
conn = tion()
cur = conn.cursor()
return True
except Exception as e:
print('[{}]meet error'.format(sql))
print(e.args[-1])
return Fal
finally:
if conn:
conn.clo()
if cur:
cur.clo()
MySQL = DataBa(
'mysql',{'ur':'sa','host':'127.0.0.1','password':'xxxx','databa':'test','port':3306}
)
MsSQL = DataBa(
'sqlrver',{'ur':'sa','host':'127.0.0.1','password':'xxxxx','databa':'test','port':1433} )
Oracle = DataBa(
'oracle',{'ur':'sa','dsn':'127.0.0.1:1903/google','password':'xxxxxx','encoding':'utf-8'} )