python数据库连接池

原创 2016年08月30日 11:23:01

python-oracle数据库连接池

使用连接池,可以避免每次请求都创建一个连接,直接从连接池获取连接,大大加快连接速度和效率。
python的数据库连接池主要是DBUtils,详细的介绍可以参考:
http://www.tuicool.com/articles/U3ymUb7

这里介绍cx_oracle模块自带的连接池,同时也给出DBUtils的连接池简单使用方法。

# file: pyoracle.py
# cx_oracle自带的线程池模块
import cx_oracle

# 定义全局变量
class global_val:
    pools=None

class oraclepool(object):
    def __init__(self, user="abc", pwd="123456", ip="192.168.1.16", db="orcl"):
        self.user = user
        self.password = pwd
        self.ip = ip
        self.db = db
        self.dsn = ip + "/" + db  # 注意,oracle接受的参数其实是 dsn
        self.conn = OraclePool.get_conn(self)
        self.cursor = self.conn.cursor()

    def get_conn(self):
        """创建连接池,返回数据库连接"""
        if GOrcl.pools is None:
            GOrcl.pools = cx_Oracle.SessionPool(user=self.user, password=self.password, dsn=self.dsn, min=1, max=30,
                                                increment=2)
        return GOrcl.pools.acquire()

    def release(self):
        """连接不用了,要返回连接池"""
        GOrcl.pools.release(self.conn)

    def execute(self, sql):
        """执行sql语句"""
        self.cursor.execute(sql)
        self.conn.commit()

    def get_conn_num(self):
        """获取当前的激活的连接数"""
        return GOrcl.pools.busy

# ------------------------------------------------------------
# 使用方法:
# file: test.py
import pandas as pd
import pyoracle
# 实例化
orcl = pyoracle.oraclepool()
# 使用pandas读取数据
data = pd.read_sql("select sysdate from daul", orcl.conn)
# 类的方法
data = orcl.execute("select 1 from dual")
# 将连接放回到连接池
orcl.release()

DBUtils模块,其实更加通用,因为支持所有的标准的数据库,比如mysql,sqlserver等。
这里的例子参考下面的博文:
http://blog.csdn.net/zbc1090549839/article/details/51336458

# 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()

Python 数据库的连接池

在Python中如果对象定义了__del__方法的话,在对象的引用记数为0时会自动调用__del__方法(很象c++中的析构函数),但如果A对象引用B对象,B对象又引用A对象,就形成循环引用,此时A,...
  • bluehawksky
  • bluehawksky
  • 2014年09月05日 16:03
  • 2506

python数据库连接池

Python数据库连接池模块-----DBUtils使用 - 菜菜鸟向前进 http://www.tuicool.com/articles/U3ymUb7 python数据库连...
  • buster2014
  • buster2014
  • 2015年12月31日 13:08
  • 859

Python实现Mysql数据库连接池

python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且...
  • zbc1090549839
  • zbc1090549839
  • 2016年05月07日 10:57
  • 21628

Python数据库连接池 《DBUtils用户指南》

DBUtils 用户指南 版本: 0.9.2 发行版: ...
  • gashero
  • gashero
  • 2007年04月24日 11:14
  • 20827

数据库连接池(Oracle,Mysql,SQLite)

现在代码大牛这么犀利,自己也懒得去xi
  • Silver_sail
  • Silver_sail
  • 2014年09月11日 10:38
  • 2926

Redis 和数据库连接池

一、先来搞清楚两个问题:Redis 到底是什么,数据库连接池又是怎么一回事?   1. Redis 是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,...
  • Ethan_Fu
  • Ethan_Fu
  • 2015年09月10日 14:21
  • 1533

各种数据库连接池对比

主要功能对比 Druid BoneCP DBCP C3P0 Proxool JBoss Tomcat-Jdbc LRU 是 否 是 否 是 是 ? PSCache 是 是 是 是 否 否 是 PSCa...
  • Bleachswh
  • Bleachswh
  • 2016年11月15日 20:12
  • 859

python爬虫<在Pipeline创建数据连接池批量写入MySQL>

以下是连接池的参数说明: def __init__(self, creator, mincached=0, maxcached=0, maxshared...
  • Gpwner
  • Gpwner
  • 2017年10月30日 13:44
  • 300

数据库连接池原理详解与自定义连接池实现

实现原理数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最...
  • fuyuwei2015
  • fuyuwei2015
  • 2017年05月17日 18:18
  • 1393

数据库连接池概念

该文章来自于阿里巴巴技术协会(ATA)精选文章。 这次我们来聊聊数据库的连接, 因为我觉得这是蛮有内容且蛮重要的一部分内容。首先会从单个的连接池讲起,重点考察下单连接池和数据库的交互情况, 然后...
  • haonan108
  • haonan108
  • 2016年08月23日 09:49
  • 699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python数据库连接池
举报原因:
原因补充:

(最多只允许输入30个字)