python oracle连接池_python 使用连接池 连接 mysql

问题

当我们在Python中连接Mysql时,每次增、删、改、查如果都申请一个数据库连接的话,当应用程序对mysql数据库请求量大时候,运行Python的机器就会大量报time  wait(我碰到的是40000+) 。这是因为每次连接mysql数据库请求时,都是独立的去请求访问(看到开发者的代码后得出结论),相当浪费资源,访问数量达到一定量时 ,运行程序的机器就报警了。

解决办法:

访问数据库应该使用连接池,来达到复用数据库连接的目的

python数据库连接池使用方法:

a、安装 DBUtils(这里是DBUtils-1.3.tar.gz包)

b、tar -zxvf DBUtils-1.3.tar.gz

c、cd DBUtils-1.3

d、 python setup.py install (安装)

代码示例:

import pymysql

from DBUtils.PooledDB import PooledDB

'''

PooledDB() 参数含义

creator:使用链接数据库的模块

maxconnections:连接池允许的最大连接数,0和None表示没有限制

mincached:初始化时,连接池至少创建的空闲的连接,0表示不创建

maxcached:连接池空闲的最多连接数,0和None表示没有限制

maxshared:连接池中最多共享的连接数量,0和None表示全部共享,ps:其实并没有什么用,因为pymsql和MySQLDB等模块中的threadsafety都为1,所有值无论设置多少,_maxcahed永远为0,所以永远是所有链接共享

blocking:链接池中如果没有可用共享连接后,是否阻塞等待,True表示等待,False表示不等待然后报错

setsession:开始会话前执行的命令列表

ping:ping Mysql 服务端,检查服务是否可用

'''

global_pool = PooledDB(

creator=pymysql,

maxconnections=500,

mincached=0,

maxcached=20,

maxshared=0,

blocking=True,

setsession=[],

ping=5,

host=global_db_addr,

port=3306,

user='xxxx',

password='xxxxxx',

database='xxxxx',

charset='utf8mb4')

# 以后每次需要数据库连接用 connection() 函数获取连接即可

conn = global_pool.connection()

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = conn.cursor()

#sql = 'INSERT INTO ' + tbl_name + ' (`time_key`,`code`,`direct`) VALUES (%s, %s, %s);'

#params = (dic_data["time_key"], dic_data["code"], dic_data["direct"])

tbl_name = 'stock_cur_kline_sh'

stock_code = 'SH.600161'

time_key = '2020-02-28 00:00:00'

sql = "SELECT Close FROM " + tbl_name + " where code = '" + stock_code + "' and time_key = '" + time_key + "';"

try:

# 执行SQL语句

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

for row in results:

close = row[0]

# 打印结果

print("close=%f" %(close))

except Exception as e:

print("插入数据库异常, msg=%s" % (e))

logging.error(traceback.format_exc())

finally:

print("插入数据库成功")

cursor.close()

conn.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值