Python鏈接Oracle

Python鏈接Oracle


當前環境:Linux Centos 7python

1. 下載安裝包cx_Oracle

因爲我本地Python版本是2.7,因此選擇是2.7版本linux

wget https://pypi.python.org/packages/e1/18/00987c6a9af9568ee87d1fcba877407684a3f1b87515e5eb82d5d5acb9ff/cx_Oracle-6.0rc1-py27-1.x86_64.rpm#md5=ff8f5cce07bd5ec8ed3ce5c79d451474

參考:git

2. 安裝cx_Oracle

  • 安裝:
rpm -ivh cx_Oracle-6.0rc1-py27-1.x86_64.rpm
  • 查看當前python引入模塊庫的路徑
[root ~]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', '/usr/lib/python2.7/site-packages/AliyunUtil-0.0.1-py2.7.egg', '/usr/lib/python2.7/site-packages/cloud_init-0.7.6-py2.7.egg', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
  • 檢查安裝路徑,若是cx_Oracle.so文件不在以上python引入路徑內須要將該文件拷貝到以上python引入路徑,因此我這裏不須要進行拷貝操做
[root ~]# rpm -qa | grep cx_Oracle | xargs rpm -ql
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/PKG-INFO
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/SOURCES.txt
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/dependency_links.txt
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/top_level.txt
/usr/lib64/python2.7/site-packages/cx_Oracle.so

3. 下載Oracle Library

因爲Oracle官網下載東西存在Auth認證,因此簡單點就點擊選中的rpm包保存在windows上,而後上傳到linux上便可
注意:github

  • 下載的版本要和鏈接的Oracle基本一致,我須要鏈接的Oracle版本是11.2,因此我下載的是oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
  • 操做系統要和以前下載的cx_Oracle要一致,這很重要!!!我在這個上面栽了跟頭,花了比較多的時間。。。因此我須要下載64位的
  • Oracle官網下載東西你得先勾選Accept License Agreement,不然你下載不了
  • 其次你得有Oracle的帳號

4. 安裝Oracle Library

rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

5. 配置環境變量

  • 修改Oracle安裝路徑
    client64改成client,至於爲何要改暫時還不清楚,只知道不改的話會報錯Oracle Client library cannot be loaded: libclntsh.so: cannot open shared object file: No such file or directory
cd /usr/lib/oracle/11.2/
mv client64 client
  • 打開~/.bashrc,追加環境變量路徑
vim ~/.bashrc
  • 配置環境變量
// 查看Oracle安裝路徑
[root@iZbp180vortqapb7yf8217Z ~]# rpm -qa | grep oracle | xargs rpm -ql
/usr/lib/oracle/11.2/client64/bin/adrci
/usr/lib/oracle/11.2/client64/bin/genezi
/usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1
/usr/lib/oracle/11.2/client64/lib/libnnz11.so
/usr/lib/oracle/11.2/client64/lib/libocci.so.11.1
/usr/lib/oracle/11.2/client64/lib/libociei.so
/usr/lib/oracle/11.2/client64/lib/libocijdbc11.so
/usr/lib/oracle/11.2/client64/lib/ojdbc5.jar
/usr/lib/oracle/11.2/client64/lib/ojdbc6.jar
/usr/lib/oracle/11.2/client64/lib/xstreams.jar
// 追加ORACLE_HOME環境變量路徑
export ORACLE_HOME=/usr/lib/oracle/11.2/client
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  • 生效配置
source ~/.bashrc

6. 檢查是否能夠引入cx_Oracle

import沒有報錯,說明以前的辛苦沒有白費vim

[root client64]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

7. 鏈接Oracle

一個插入n條數據的Python腳本:windows

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import cx_Oracle
import time

rows = int(sys.argv[1])
con = cx_Oracle.connect('test/test@sampledb')
cur = con.cursor()
cur.execute("SELECT MAX(ID) FROM PTTEST")
max_id = cur.fetchone()[0] or 0

start_id = max_id + 1
for i in xrange(rows):
    cur.execute("INSERT INTO PTTEST (ID, NAME, AGE, GENDER, SALARY)VALUES(%d, 'pt', 15, 'male', 50000)" % int(i + start_id))
    if i % 100 == 0:
        time.sleep(3)
        print 'Insert rows [%d]:%d' % (int(time.time()), i)
        con.commit()
cur.close()
con.close()
相關文章
相關標籤/搜索