首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Python 與 Oracle 的完美結合:為資料庫專家增添利器

     編輯:Oracle 資料庫基礎

為什麼 Oracle 專家需要 Python?

PL/SQL 雖強大,但處理檔案操作、呼叫外部程式、複雜文本解析、物件導向開發等任務時顯得力不從心。Python 以簡潔易讀、動態型別、豐富標準庫與跨平台免費開源特性,成為延伸 Oracle 能力的最佳夥伴。其「可執行的偽代碼」風格讓代碼極易維護,無論新手或專家皆能快速上手。

快速上手:互動式解釋器與檔案處理

>>> initFile = open('init_orcl.ora')
>>> firstLine = initFile.readline().strip()  # 記得加 () 呼叫方法
>>> firstLine
'FAST_START_MTTR_TARGET=300'

# 內省發現字串方法
>>> dir(firstLine)
['split', 'strip', ...]
>>> param, val = firstLine.split('=')
>>> param, val
('FAST_START_MTTR_TARGET', '300')

腳本化:解析參數檔並存入字典

# readInitOra.py
def read(fileName):
    initParams = {}
    with open(fileName, 'r') as f:
        for line in f:
            param, val = line.strip().split('=')
            initParams[param] = val
    return initParams

巢狀結構:比較多個參數檔

# compareInitOra.py
import readInitOra
initParams = {}
for fname in ['init_orcl.ora', 'init_default.ora']:
    initParams[fname] = readInitOra.read(fname)
print(initParams)
# 輸出巢狀字典,便於後續處理

Python 操作 Oracle:cx_Oracle 模組

安裝對應版本的 cx_Oracle (Windows 提供安裝程式),即可使用標準 DB-API 2.0 介面。

建立表並寫入參數

import cx_Oracle, readInitOra
conn = cx_Oracle.connect('scott/tiger@orcl')
curs = conn.cursor()
curs.execute("""CREATE TABLE INIT_PARAMS
  (fileName VARCHAR2(30), param VARCHAR2(64), value VARCHAR2(512))""")

for fname, params in readInitOra.read(fname).items():
    for param, val in params.items():
        curs.execute("INSERT INTO INIT_PARAMS VALUES (:1, :2, :3)", (fname, param, val))
conn.commit()
curs.close()

查詢與綁定變數

curs.execute('SELECT name, value FROM V$PARAMETER')
liveParams = {row[0].upper(): row[1] for row in curs.fetchall()}

fileParams = readInitOra.read('init_orcl.ora')
for param, val in fileParams.items():
    if liveParams.get(param) != val:
        print(f"{param}: 參數檔={val}, 實例={liveParams.get(param)}")

物件關聯映射 (ORM) 工具

若偏好物件導向操作,可評估:SQLObject (即將支援 Oracle)、forgetSQL、ll.orasql、Modeling Object-Relational Bridge、sqlWrap 等。

Web 發布:CherryPy 輕量框架

import cherrypy, readInitOra, cx_Oracle

def readLiveParams(instance):
    live = {}
    conn = cx_Oracle.connect(f'scott/tiger@{instance}')
    curs = conn.cursor()
    curs.execute('SELECT name, value FROM V$PARAMETER')
    for row in curs.fetchall():
        live[row[0].upper()] = row[1]
    return live

def Html(initOraFile, instance):
    result = ""
    fileParams = readInitOra.read(initOraFile)
    liveParams = readLiveParams(instance)
    for param, val in fileParams.items():
        lv = liveParams.get(param)
        if lv == val:
            result += f'{val}
\n' else: result += f'{val} (file) {lv} (live)
\n' return result class WebApp: @cherrypy.expose def index(self, initOraFile='init.ora', instance='orcl'): return Html(initOraFile, instance) cherrypy.quickstart(WebApp()) # 預設 https://localhost:8080

結語

Python 賦予 Oracle 專家檔案處理、文本分析、Web 開發、XML/Web Services、GUI、單元測試等全方位能力,且無需切換語言。從今天開始,將 Python 加入您的工具箱,體驗「簡單即是強大」的開發樂趣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved