其实,cx_Oracle python module本身没啥多说的。我重点说一下在redhat上做cx_Oracle环境准备。
安装Oracle Client
我在oracle官网下载了oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm。
rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
安装cx_Oracle 模块
在http://cx-oracle.sourceforge.net/,下载cx_Oracle-5.1.1-11g-py24-1.x86_64.rpm
rpm -ivh cx_Oracle-5.1.1-11g-py24-1.x86_64.rpm
配置环境变量
在.basah_profile里,配置加载oracle lib和指定TNS_Admin.
ORACLE_HOME=/usr/lib/oracle/11.2/client64
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
TNS_ADMIN=<TNS_Path>
export LD_LIBRARY_PATH
export TNS_ADMIN
在TNS_path的文件夹下,指定tnsnames.ora
ORALOCAL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oralocal)
)
)
Run python Code
#! /usr/bin/python
import time
import cx_Oracle
print "Begin Time is:", time.asctime()
days = 5
current = time.time();
delTime = current - 3600*24*days;
timeDelTuple = time.localtime(delTime);
print "Delete Time is:", time.asctime(timeDelTuple)
delTimeStr = "%04d-%02d-%02d.%02d-%02d-%02d" % timeDelTuple[0:6];
sql = "update wisb ew set ew.status_id=4 where ew.wisb_id in (select w.wisb_id from wisb w where w.updated < to_date('" + delTimeStr + "','YYYY-MM-DD.HH24-MI-SS') and w.status_id in (2,6,8))";
print "SQL is:", sql;
connstr = "ODB/ODB@ORALOCAL"
conn = cx_Oracle.connect(connstr)
cur = conn.cursor()
cur.execute(sql)
print "Number of rows been updated is: ", cur.rowcount
conn.commit();
cur.close();
conn.close();
print "Complete Time is:", time.asctime()