数据库连接池技术

正常数据库连接

 

#建立数据库              

db = pymysql.connect(user="root",password='123456',port=3306,host=localhost,database="mysql",charset="utf-8")

#创建游标

cur = db.cursor()

#游标方法

cur.execute("")

#提交到数据库

db.commit()

#关闭游标对象

cur.close()

#断开数据库连接

db.close()

 

 

 

 

数据库连接池技术

PooledDB参数解释:

  1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接。
  2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接。
  3. maxconnections,最大的连接数,进程中最大可创建的线程数。
  4. blocking 当连接数达到最大连接数时,再次请求时,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数;如果这个值为False,会报错。
  5. masxshared,当连接数达到这个数时,新请求的连接会分享已经分配出去的连接。

uwsgi中,每个http请求都会有一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中创建的线程数),如果业务中,一个http请求中需要的sql连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。

连接池对性能的提升:

  • 在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度。
  • 关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁的打开和关闭连接。

 

 

 

# file: pyoracle.py

 

import cx_oracle

from DBUtils.PooledDB import PooledDB

 

class oracle(object):

    """数据连接对象,产生数据库连接池.

    此类中的连接采用连接池实现获取连接对象:conn = oracle.getConn()

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

    """

    # 连接池对象

    __pool = None

 

    def __init__(self):

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

        self._conn = oracle.get_onn()

        self._cursor = self._conn.cursor()

 

    @staticmethod

    def get_onn():

        """ 静态方法,从连接池中取出连接

        return oracle.connection

        """

        if oracle.__pool is None:

            user = config.global_var.user

            pwd = config.global_var.pwd

            ip = config.global_var.ip

            db = config.global_var.db

            dsn = ip + "/" + db

            __pool = PooledDB(creator=cx_Oracle, mincached=1, maxcached=20, user=user, password=pwd,

                              dsn=dsn)

        return __pool.connection()

 

    def execute(self, sql):

        """执行指定sql语句"""

        self._cursor.execute(sql)  # 执行语句

        self._conn.commit()  # 然后提交

 

    def close(self):

        """释放连接池资源"""

        self._cursor.close()

        self._conn.close()

 

#-------------------------------

# 测试

# 1.导入类

import pyoracle

# 2.创建连接池

orcl=pyoracle.oracle()

# 3.使用pandas读取数据

sql = "select sysdate from dual"

df = pd.read_sql(sql, con=orcl._conn)  # 访问私有变量的方式

print(df)

# 4.执行语句

orcl.execute(sql)

# 5.最后记得关闭连接,也就是将连接放回连接池

orcl.close()

---------------------

作者:振裕

来源:CSDN

原文:https://blog.csdn.net/suzyu12345/article/details/52367746

版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值