windows10,redhat6.5下python3.5.2使用cx_Oracle連接oracle

0.序言

項目主要使用oracle可是我不太喜歡其餘編程語言,加上可能須要用python部署算法包,從oracle表中讀出數據,處理完成後在放回oracle中去,因此在windows上就想到先用python試一下,天然搜到了cx_oracle(一個按照Python DB API的oracle的實現,如MySQL、PostgreSQL等,只須要安裝相應的軟件包便可,流程及操做接口都與cx_Oracle基本一致),下面就簡單解釋一下怎麼用這個包進行增刪改查。html

1.windows 10 安裝cx_Oracle注意事項

前提條件是機器自己安裝好oracle client(個人機器已經安裝好了),而且,oracle client版本cx_oracle版本,cx_oracle和python版本須要對應。python

1.1 oracle client版本

若是windows系統沒有安裝oracle client 須要首先在:linux

http://www.oracle.com/technetwork/topics/winx64soft-089540.html算法

下載對應的版本,個人系統是windows10
查看系統的中的oracle client版本,使用sql/plus命令:sql

sqlplus -vSQL*Plus:數據庫

這裏寫圖片描述

在安裝好cx_oracle後
使用cx_Oracle.clientversion()查看爲(11, 2, 0, 4, 0)編程

1.2 cx_oracle版本

cx_oracle和python版本須要對應,
我操做系統的版本是64位,因此上述軟件採用的都是64位安裝程序。python安裝的版本是3.5.2windows

tnsnames.ora文件我並無配置?不知道是否是以前系統配置過了,或者是直接移動dll能夠不用配置此文件。(期待大牛指導,我還不知道這個是弄啥的)bash

1.3 使用python模塊cx_oracle連接oracle

C:\Users\123456>sqlplus -vSQl*Plus:
SQL*Plus: Release 11.2.0.2.0 Production
上述oracle client 版本爲11.2,因此須要在https://pypi.python.org/pypi/cx_Oracle/5.2.1服務器

這裏寫圖片描述

下載cx_Oracle-5.2.1-11g.win-amd64-py3.5.exe,安裝運行,
注意,windows版本使用pip安裝的話可能會出錯,因此推薦使用上述方式安裝
將:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

下載的安裝包中的: instantclient-basic-windows.x64-11.2.0.4.0
oci.dll此dll依賴下面兩個dll(否則運行時候要出現:unable to acquire oracle environment handle)

ocijdbc11.dll
oraociei11.dll

複製到:C:\Python35\Lib\site-packages下


2. Redhat linux 6.5 下安裝cx_Oracle

固然,若是oracle安裝在linux 主機上,或者須要使用通用的服務器性能。因此仍是須要姜python等插件部署在linux服務器上面,下面就分享一下紅帽主機下使用python的插件cx_Oracle(注意大寫)入庫。

2.1 Linux下多個版本的python共存

Linux下默認系統自帶python2.6的版本,這個版本被系統不少程序所依賴,因此不建議刪除,若是使用最新的Python3那麼咱們知道編譯安裝源碼包和系統默認包之間是沒有任何影響的,因此能夠安裝python3和python2共存

2.1.1 使用版本管理工具pyenv

常常遇到這樣的狀況:
• 系統自帶的Python是2.6,本身須要Python 2.7中的某些特性;
• 系統自帶的Python是2.x,本身須要Python 3.x;
此時須要在系統中安裝多個Python,但又不能影響系統自帶的Python,即須要實現Python的多版本共存。pyenv就是這樣一個Python版本管理器。能夠下載安裝。

2.2.2 安裝時進行配置

若是你想用python3,你能夠下載python源碼,在配置的時候指定perfix,好比你能夠安裝到/usr/local/python3, (主要步驟)

./configure –prefix=/usr/local/python3

以後配置正確就可使用/usr/local/python3/bin/python3啓動python3.

通常安裝步驟
RedHat下安裝Python3步驟

1.下載解壓。

$ tar zxvf Python-3.5.2.tgz

2.進入解壓後的目錄,執行安裝配置

$ ./configure –prefix=/opt/python3

3.Build

$ make

4.Install

$ make install

5.創建軟鏈接
安裝後創建一個連接,這樣咱們能夠用python3直接運行程序,和python2區別開來。

$ ln -s /opt/python3/bin/python3 /usr/bin/python3

以後直接在命令行輸入python3就能夠直接啓動啦。


2.2 linux 下 cx_Oracle安裝

安裝Python的cx_Oracle,接下來講說如何安裝它。

1、涉及軟件包

一、cx_Oracle

下載地址:http://sourceforge.net/projects/cx-oracle/files/?source=navbar
我下載的是最新版的cx_Oracle-5.2.1.tar.gz

二、Oracle_client

使用cx_Oracle必需要安裝Oracle_client端,或者你已經安裝了Oracle數據庫。
下載地址:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

以鏈接Oracle11(其實12也行,這和oracle client版本無關)爲例須要下載如下rpm包:

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm

軟件包都下載完後,咱們開始來安裝。

2、源碼安裝

一、Oracle_client端安裝:

# rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm

# echo /usr/lib/oracle/11.2/client64/lib/ >> /etc/ld.so.conf
# ldconfig

若是不進行ldconfig配置,在運行cx_Oracle時會報如下錯誤:

libclntsh.so.11.1: cannot open shared object file: No such file or directory

二、設置相應用戶的環境變量:
在這裏須要說明下,你使用哪一個賬戶裝cx_Oracle就須要配置哪一個賬戶的環境變量,如下已root賬戶爲例;
若是不配置環境變量、或環境變量配置不正確,在安裝cx_Oracle時,會報各類錯誤,好比說:
oci.h: No such file or directory

#vi ~/.bashrc
export TNS_ADMIN=」/usr/lib/oracle」
export ORACLE_HOME=」/usr/lib/oracle/11.2/client64」
export LD_LIBRARY_PATH=」${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib」
export PATH=」${PATH}:${ORACLE_HOME}」
#source ~/.bashrc

三、源碼安裝

#tar -zxvf cx_Oracle-5.1.2.tar.gz
#cd cx_Oracle-5.1.2
#python setup.py install

四、安裝成功後相應檢查

#python3
Python 3.5.2 (default, Aug 21 2013, 12:12:55)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2
Type 「help」, 「copyright」, 「credits」 or 「license」 for more information.
>>>import cx_Oracle
>>>

到這沒啥問題就ok了。

相關閱讀:
CentOS install Python 2.6.5 & cx_Oracle http://www.linuxidc.com/Linux/2011-04/34193.htm
Python中cx_Oracle模塊安裝遇到的問題與解決方法 http://www.linuxidc.com/Linux/2011-04/34118.htm
Python+cx_Oracle安裝及一個簡單示例(歸檔下熱備數據文件) http://www.linuxidc.com/Linux/2010-10/29187.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
Python 的詳細介紹:請點這裏
Python 的下載地址:請點這裏
更多Oracle相關信息見Oracle 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=12

3. cx_Oracle使用簡介

使用流程:
1.導入模塊cx_Oracle
2.鏈接數據庫
3.獲取cursor
4.使用cursor進行各類操做
5.關閉cursor
6.關閉鏈接

實例代碼

import sys
import cx_Oracle

connection = cx_Oracle.Connection("user/pw@tns")
cursor = connection.cursor()

try:
    cursor.execute("select 1 / 0 from dual")
except cx_Oracle.DatabaseError, exc:
    error, = exc.args
    print >> sys.stderr, "Oracle-Error-Code:", error.code

一次多行

大型的插入操做不需求屢次的單獨插入,這是由於 Python 經過 cx_Oracle.Cursor.executemany 方法徹底支持一次插入多行。限制執行操做的數量極大地改善了程序性能,所以在編寫存在大量插入操做的應用程序時應首先考慮這一功能。

咱們首先爲 Python 模塊列表建立一個表,此次直接從 Python 開始。您將在之後刪除該表。

create_table = 「」」
CREATE TABLE python_modules (
module_name VARCHAR2(50) NOT NULL,
file_path VARCHAR2(300) NOT NULL
)
「」」
from sys import modules
cursor.execute(create_table)
M = []
for m_name, m_info in modules.items():
try:
M.append((m_name, m_info.__file__))
except AttributeError:
pass

cursor.prepare(「INSERT INTO python_modules(module_name, file_path) VALUES (:1, :2)」)
cursor.executemany(None, M)
db.commit()
r = cursor.execute(「SELECT COUNT(*) FROM python_modules」)
print cursor.fetchone()

cursor.execute(「DROP TABLE python_modules PURGE」)
僅向數據庫發出一個執行操做,要求將 76 個模塊名稱所有插入。這對大型插入操做而言是一個巨大的性能提高。注意此處的兩點小的不一樣:cursor.execute(create_tab) 不產生任何輸出,這是由於它是一個 DDL 語句,而 (76,) 是一個有單個元素的字節組。不含逗號的 (76) 徹底等同於整數 76。

(未完待續。。。。)

參考文檔

http://cx-oracle.readthedocs.io/en/latest/

精通oracle+python系列:(官方文檔強烈推薦)
http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-1391323-zhs.html

其餘還未看:
https://my.oschina.net/bxxfighting/blog/386578
http://www.cnblogs.com/hzhida/archive/2012/08/13/2636735.html
http://blog.itpub.net/22664653/viewspace-711879/
http://www.cnblogs.com/heric/p/5804434.html
http://www.cnblogs.com/linn/p/4229083.html
調用存儲過程
http://blog.csdn.net/my2010sam/article/details/20724001

相關文章
相關標籤/搜索