如何在python多进程代码中使用cx_Oracle创建一个连接(或会话)池来连接Oracle数据库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python多进程代码中使用cx_Oracle创建一个连接(或会话)池来连接Oracle数据库?相关的知识,希望对你有一定的参考价值。

我有一个很长的 multiprocessing python code 其中涉及到与 Oracle database 在运行过程中多次。这段代码应该是一个独立的应用程序,它将24*7运行,并从db中获取数据,使用多处理执行,将结果写回db,然后再次轮询数据库以获取新的数据,并不断重复这个循环。 connection pool (or session pool我不知道这两者之间的区别,新的python和编码),以提高代码的性能?需要连接到Oracle数据库使用 cx_oracle.任何帮助将被感激。非常感谢!!

答案

如何创建一个连接池(或会话池,我不知道这2个池子的区别,python和编码方面的新手)来提高代码的性能?

每个连接池中的 cx_Oracle connection pool 相当于一个 Oracle session.

当应用程序频繁连接和断开数据库时。连接池 会提升性能。cx_Oracle 连接池允许应用程序创建和维护一个连接到数据库的池。池子的创建是通过 cx_Oracle.SessionPool() 然后 SessionPool.acquire() 可以被调用以从池中获取连接。初始池大小和最大池大小是在创建池时提供的。当池需要增长时,会自动创建新的连接。当连接不再使用时,池可以缩回最小尺寸。从池中获取的连接应使用以下方法释放回池中。SessionPool.release()Connection.close() 当它们不再被需要时,就会被释放。否则,当所有引用连接的变量退出作用域时,它们将被自动释放回池中。会话池可以使用 SessionPool.close().

下面的例子展示了如何使用连接池连接到Oracle数据库。

# Create the session pool
pool = cx_Oracle.SessionPool("hr", userpwd,
        "dbhost.example.com/orclpdb1", min=2, max=5, increment=1, encoding="UTF-8")

# Acquire a connection from the pool
connection = pool.acquire()

# Use the pooled connection
cursor = connection.cursor()
for result in cursor.execute("select * from mytab"):
    print(result)

# Release the connection to the pool
pool.release(connection)

# Close the pool
pool.close()

阅读更多关于 连接池.

以上是关于如何在python多进程代码中使用cx_Oracle创建一个连接(或会话)池来连接Oracle数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用Python解决Cx_Oracle查询时UnicodeDecodeError的问题

如何在 RHEL 上为 Python 安装 cx_Oracle?

在 Python 中使用 cx_Oracle 中的 executemany() 从批量插入数据加载中查找错误记录

Python应用实战系列-如何通过Python来操作Oracle数据库:cx_Oracle

如何在python中将十六进制字符串转换为二进制以使用cx_oracle插入

使用 cx_oracle 批量下载表