python使用连接池DBUtils连接oracle

PooledDB 模式

# coding=utf-8

from DBUtils.PooledDB  import PooledDB
import cx_Oracle
pool = PooledDB(
    creator = cx_Oracle, #使用链接数据库的模块
    maxconnections = 5,  #连接池允许的最大连接数,0和None表示没有限制
    mincached = 2, #初始化时,连接池至少创建的空闲的连接,0表示不创建
    maxcached = 3, #连接池空闲的最多连接数,0和None表示没有限制
    maxshared = 0, #连接池中最多共享的连接数量,0和None表示全部共享,ps:其实并没有什么用,因为pymsql和MySQLDB等模块中的threadsafety都为1,所有值无论设置多少,_maxcahed永远为0,所以永远是所有链接共享
    blocking = True, #链接池中如果没有可用共享连接后,是否阻塞等待,True表示等待,False表示不等待然后报错
    setsession = [],#开始会话前执行的命令列表
    ping = 0,#ping Mysql 服务端,检查服务是否可用
    user = 'scott',
    password = 'tiger',
    dsn = '127.0.0.1:1521/oradb',
    encoding='utf-8'
)
# 获取数据库连接的方式
conn = pool.connection()

例子

# coding=utf-8
from DBUtils.PooledDB  import PooledDB
import cx_Oracle
pool = PooledDB(
    creator = cx_Oracle, #使用链接数据库的模块
    maxconnections = 5,  #连接池允许的最大连接数,0和None表示没有限制
    mincached = 2, #初始化时,连接池至少创建的空闲的连接,0表示不创建
    maxcached = 3, #连接池空闲的最多连接数,0和None表示没有限制
    maxshared = 0, #连接池中最多共享的连接数量,0和None表示全部共享,ps:其实并没有什么用,因为pymsql和MySQLDB等模块中的threadsafety都为1,所有值无论设置多少,_maxcahed永远为0,所以永远是所有链接共享
    blocking = True, #链接池中如果没有可用共享连接后,是否阻塞等待,True表示等待,False表示不等待然后报错
    setsession = [],#开始会话前执行的命令列表
    ping = 0,#ping Mysql 服务端,检查服务是否可用
    user = 'scott',
    password = 'tiger',
    dsn = '127.0.0.1:1521/oradb',
    encoding='utf-8'
)
a=input('暂停,在plsql中查询session数量')
# 获取数据库连接的方式
conn = pool.connection()
cursor=conn.cursor()
cursor.prepare('select * from student')
cursor.execute(None)
rows=cursor.fetchall()
for item in rows:
    print(item)

cursor.close()
conn.close()

a=input('暂停,关闭连接后,在plsql中查询session数量')

查询session数量的sql:

select * from v$session where username='SCOTT'

原文出处:/show_1EF3uECqiJHo.html