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

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

文件的需求。

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)

Logo

一站式 AI 云服务平台

更多推荐