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
:x 存檔離開
- 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
重開機, 讓 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
:x 存檔離開
- 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 程式
不然您會發現,crontab 到指定時間有執行,資料卻沒存入 Oracle。