首页 > 自动化运维 > DevOps > python数据库模块-Cx_Oracle
Cx_oracle 7
cx_Oracle 是一个 Python 扩展模块,它允许 Python 访问 Oracle 数据库。用户通过调用 python 的 cx_oracle 函数,函数内部动态加载 Oracle Client libraries 以访问 Oracle 数据库。
特性:
cx_Oracle 功能的亮点是:
1. 从 PyPI 轻松安装
2. 支持 Python2 和 3 以及多个 Oracle 数据库版本(支持 Oracle 客户端 11.2 、 12 、 18 和 19 。 Oracle 的标准跨版本互操作性,允许轻松升级和连接到不同的 Oracle 数据库版本。)
3.SQL 和 PL/SQL 语句的执行
4. 广泛的 Oracle 数据类型支持,包括大型对象( CLOB 和 BLOB )和 SQL 对象绑定
5. 连接管理,包括连接池
6.Oracle 数据库高可用性功能
7. 充分利用 Oracle 网络服务基础设施,包括加密网络流量和安全功能
入门
使用安装步骤安装 cx_Oracle :
1. 使用 pip 安装
|
python -m pip install cx_Oracle --upgrade |
2. 将 Oracle 19 、 18 、 12 或 11.2 客户端 client libraries 添加到操作系统库搜索路径中,如 Windows 上的 PATH 或 Linux 上的 LD_library_path 。在 macOS 上,将文件移动到 ~/lib 或 /usr/local/lib 。
相关下载地址: https://www.oracle.com/database/technologies/instant-client.html
19, 18,12.2 版本的 client libraries 能连接 Oracle Database 11.2 及以上版本。
12.2 版本的 client libraries 能连接 Oracle Database 10.2 及以上版本。
11.2 版本的 client libraries 能连接 Oracle Database 9.2 及以上版本。
创建脚本 query.py ,如下所示:
|
# query.py
from __future__ import print_function import cx_Oracle
# Establish the database connection connection = cx_Oracle.connect("hr", userpwd, "dbhost.example.com/orclpdb1")
# Obtain a cursor cursor = connection.cursor()
# Data for binding managerId = 145 firstName = "Peter"
# Execute the query sql = """SELECT first_name, last_name FROM employees WHERE manager_id = :mid AND first_name = :fn""" cursor.execute(sql, mid = managerId, fn = firstName)
# Loop over the result set for row in cursor: print(row)
|
与数据库的简单连接需要用户名、密码和连接字符串。找到您的 Oracle 数据库用户名和密码以及数据库连接字符串,并在 query.py 中使用它们。
cursor 游标是允许执行语句和获取结果的对象。
:mid 及 :fn 是用到了 sql 的绑定变量,这将语句文本与数据分离,有助于避免 SQL 注入安全风险。
我们运行这个脚本,可得:
|
D:\dba>python query.py ('Peter', 'cat') |
连接到 Oracle 数据库
建立数据库连接
使用 cx_Oracle 连接到 Oracle 数据库有两种方法:
独立连接
当应用程序维护到数据库的单个用户会话时。连接是由 cx_Oracle.connect ()或其别名 cx_Oracle.Connection ()创建的。
池连接
当应用程序频繁地连接和断开与数据库的连接时,连接池对于性能非常重要。池实现中的 Oracle 高可用性功能意味着,对于那些希望少数连接可供不经常使用的应用程序,小池也很有用。使用 cx_Oracle.SessionPool ()创建池,然后可以调用 SessionPool.acquire ()从池获取连接。
示例:与 Oracle 数据库的独立连接
|
import cx_Oracle
userpwd = ". . ." # Obtain password string from a user prompt or environment variable
connection = cx_Oracle.connect("hr", userpwd, "dbhost.example.com/orclpdb1", encoding="UTF-8")
|
当调用 Connection.close ()不再需要连接时,应释放连接。其中一种方法是使用“ with ”块,它可以确保连接在块完成后关闭。例如:
|
with cx_Oracle.connect(userName, password, "dbhost.example.com/orclpdb1", encoding="UTF-8") as connection: cursor = connection.cursor() cursor.execute("insert into SomeTable values (:1, :2)", (1, "Some string")) connection.commit()
|
此代码确保块完成后,连接将关闭,数据库将回收资源。此外,任何试图在块外使用变量连接的尝试都将失败。
特权连接
下面的示例演示如何以 SYSDBA 身份连接到 Oracle 数据库:
|
connection = cx_Oracle.connect("sys", syspwd, "dbhost.example.com/orclpdb1", mode=cx_Oracle.SYSDBA, encoding="UTF-8")
cursor = con.cursor() sql = "GRANT SYSOPER TO hr" cursor.execute(sql) |
SQL 执行
执行 SQL 语句是 Python 应用程序与 Oracle 数据库通信的主要方式。语句使用 Cursor.execute ()或 Cursor.executemany ()方法执行。语句包括查询、数据操作语言( DML )和数据定义语言( DDL )。还可以执行其他一些特殊语句。
cx_Oracle 可用于执行单个语句,一次执行一个,不支持 sql 文件,如果需要的话,官方提供一个执行 sql 文件的函数,可以调用该函数实现执行 sql 文件的需求。 https://github.com/oracle/python-cx_Oracle/blob/master/samples/SampleEnv.py
SQL 语句不应包含尾随分号(“;”)或正斜杠(“ / ”)
|
cur.execute("select * from MyTable") |
SQL 查询
查询(以 SELECT 或 with 开头的语句)只能使用 Cursor.execute ()方法执行。然后可以迭代行,或者使用 Cursor.fetchone ()、 Cursor.fetchmany ()或 Cursor.fetchall ()方法之一获取行。
Fetch Methods
|
cur = connection.cursor() cur.execute("select * from MyTable") while True: row = cur.fetchone() if row is None: break print(row)
|
|
cur = connection.cursor() cur.execute("select * from MyTable") numRows = 10 while True: rows = cur.fetchmany(numRows) if not rows: break for row in rows: print(row)
|
cur.fetchall()
|
cur = connection.cursor() cur.execute("select * from MyTable") rows = cur.fetchall() for row in rows: print(row)
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69993859/viewspace-2752596/ ,如需转载,请注明出处,否则将追究法律责任。