python資料庫模組-Cx_Oracle

ZQqzz發表於2021-01-25

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

Cursor.fetchone() :

cur = connection.cursor()

cur.execute("select * from MyTable")

while True:

    row = cur.fetchone()

    if row is None:

        break

    print(row)

 

Cursor.fetchmany() :

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部落格 ” ,連結:http://blog.itpub.net/69993859/viewspace-2752596/,如需轉載,請註明出處,否則將追究法律責任。

相關文章