Python Oracle drivers
Python 連線 Oracle 的驅動程式有很多種,因為 CentOS7 預設使用 cx_Oracle,並且其他驅動有涉及到版權規範,因此老人家還是選擇 cx_Oracle
* 以 root 身份登入 CentOS 7
* 到 Oracle 官網,(若無帳號就申請建立一個),登入、下載並安裝 oracle-instantclient11.2-basic.x86_64.rpm, oracle-instantclient11.2-devel.x86_64.rpm, oracle-instantclient11.2-sqlplus.x86_64.rpm
因為 Oracle 官網常改版,所以自己要花點時間去摸索尋找。
* 新增並編輯 oracle.sh
[root]# vi /etc/profile.d/oracle.sh
重開機, 讓 oracle.sh 設定生效
新增 Python 的測試程式 oratest.py
內容如下:
附帶看一下 curs.description 的內容:
[('FIELD1',, 2, 2, None, None, 0), ('FIELD2', , 8, 8, None, None, 0), ...]
要注意的是,若您的 Python 程式要放入排程跑,則要再加環境變數的設定:
[root]# vi /etc/crontab
不然您會發現,crontab 到指定時間有執行,資料卻沒存入 Oracle。
* 新增並編輯 oracle.sh
[root]# vi /etc/profile.d/oracle.sh
ORACLE_HOME="/usr/lib/oracle/11.2/client64" PATH=$PATH:$ORACLE_HOME/bin export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib export LD_LIBRARY_PATH:x 存檔離開
重開機, 讓 oracle.sh 設定生效
新增 Python 的測試程式 oratest.py
內容如下:
# -*- coding: utf-8 -*- import cx_Oracle conn = cx_Oracle.connect("帳號/密碼@IP/資料庫名", encoding = "UTF-8", nencoding = "UTF-8") curs = conn.cursor() curs.execute('SELECT * FROM 資料表名') # 原生方式是以欄位順序取得欄位值 # 例如 row[0], row[1], ... # 我們要很明確知道 row[0], row[1] 各代表什麼欄位 # 可讀性不高 # 我們可以繞個彎 # 將資料集的欄位讀出並存入 list columns = [i[0] for i in curs.description] # 這裡要注意 # row 對欄位名並沒有大小寫分別 # 但因我們以 curs.description 讀出的欄位名是大寫 for row in curs: print 'field1 = ' + row[columns.index('FIELD1')] conn.close()
附帶看一下 curs.description 的內容:
[('FIELD1',
要注意的是,若您的 Python 程式要放入排程跑,則要再加環境變數的設定:
[root]# vi /etc/crontab
SHELL=/bin/bash # 設置 oracle 環境變數 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/oracle/11.2/client64/bin ORACLE_HOME="/usr/lib/oracle/11.2/client64" LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:/usr/lib:/usr/local/lib ... ... 要執行的 python 程式:x 存檔離開
不然您會發現,crontab 到指定時間有執行,資料卻沒存入 Oracle。