Oracle数据库是商业软件,封闭的东西,折腾是难免的。
即使有Python接口,也是依赖Oracle原生类库的。
目前比较流行的Python访问Oracle的接口是:cx Oracle
1、安装instantclient
地址参考之前的一篇文章:《Linux下配置OCI(Oracle调用接口)》
以我的10g为例子,需要下面两个文件:
sdk-10.2.0.5.0-linux-x64.zip 需要这之中的include头文件
basiclite-10.2.0.5.0-linux-x64.zip 需要这之中的.so文件
把上述文件提取下来放到同一个目录下比如/home/lhy/instantclient_10_2,只要文件,去掉子文件夹!
然后可能需要给做一个软链接!
最后,要把目录结构export到ORACLE_HOME指定的环境变量下。
还有一个环境变量确保不会中文乱码
ln -s ./libclntsh.so.10.1 ./libclntsh.so export ORACLE_HOME=/home/lhy/instantclient_10_2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME #保证中文不会乱码! export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
2、安装cx Oracle
tar -xzvf cx_Oracle-5.1.1.tar.gz cd cx_Oracle-5.1.1 python ./setup.py install
如果顺利的话,就可以编译并安装了。
3、测试py访问Oracle
如下测试基本的连接和关闭,如果没有报错,就说明成功了!
import cx_Oracle conn = cx_Oracle.connect("User/Pass@IP:Port/SID") conn.close()
4、基本操作
参考:http://www.orafaq.com/wiki/Python
Select
connection = cx_Oracle.connect("uid/pwd@database") cursor = connection.cursor() cursor.execute("SELECT COUNT(*) FROM User_Tables") count = cursor.fetchall()[0][0] cursor.close() connection.close()
Insert
connection = cx_Oracle.connect("uid/pwd@database") cursor = connection.cursor() cursor.execute("INSERT INTO User_Tables(login,first_name,last_name,age,date_of_birth) VALUES (:login,:first,:last,:age,to_date(:dob,'YYYY-MM-DD HH24:MI:SS'))", { 'login' : 'some_user_login', 'first' : 'some_first_name', 'last' : 'some_last_name', 'age' : 42, 'dob' : '1970-01-01 23:52:00', } ) count = cursor.fetchall()[0][0] cursor.close() connection.commit() connection.close()
自己观察,不难发现和Python自带的For sqlite3的语法基本完全一样。
大虾,请问,用 cx_oracle 执行 delete 操作 如何知道删除了几条数据?知道的话告诉我一下,千万别说是执行前做个select 查询哦,谢谢了
直接用cursor.fetchall就可以把
你好,你这介绍的是假设有安装cx Oracle的权限,如果我没有呢,该怎么办
猜测你说的是没有sudo权限?
可以将python不安装在root下,安装在自己目录下就好了。