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,刚好需要写个数据库调用存储过程结果的邮件通知的小脚本,特地记录下来以免日后忘记。python能流行主要还是有很多的模块,而且这些模块的调用代码也很简洁,大大简化了工作。不过我是...

斯坦福大学怎样讲情感分析

一、自然语言处理概览——什么是自然语言处理(NLP) 1)相关技术与应用 自动问答(Question Answering,QA):它是一套可以理解复杂问题,并以充分的准...

Python实现Mysql数据库连接池

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

Python学习一:基于DBUtils和pymysql的MySQL数据库连接池封装

Python安装及配置略,本文前默认已经配置好Python环境。 打开cmd,输入python,出现以下画面表示Python安装成功。 需要库1、DBUtils 下载地址:DBUtils ...
  • cyh1111
  • cyh1111
  • 2016年11月25日 17:37
  • 4134

Python数据库连接池DBUtils

1 问题由来前一段时间用Mysqldb模块进行数据库的开发。共用一个数据库连接: import MySQLdb as mdb def create_single_conn(self): ...

python圣斗士修炼(十九):使用数据库连接池

使用连接池python编程中可以使用MySQLdb或者mysqlpy等驱动进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问...
  • Yichar
  • Yichar
  • 2017年11月22日 01:20
  • 71

Python实现Mysql数据库连接池

python连接Mysql数据库: Python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接MySQL数据库请求时,都是独立的去请求访问,相当浪费资源,...

JDBC数据库连接池实现原理

  • 2017年11月26日 23:03
  • 1.07MB
  • 下载

dbcp数据库连接池用到的jar包

  • 2017年11月03日 10:24
  • 730KB
  • 下载

配置datasource三种方式 数据库连接池 .

spring配置datasource三种方式 1、使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明:Driv...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python数据库连接池
举报原因:
原因补充:

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