设为首页 收藏本站
查看: 592|回复: 0

[经验分享] 随笔记:如何使用Python连接(/操作)Oracle数据库(Windows平台下)

[复制链接]

尚未签到

发表于 2015-12-2 13:29:09 | 显示全部楼层 |阅读模式
  遇到需求,我们需要用Python对Oracle数据库进行操作。
  这次我们使用cx_Oracle
  
  Oracle Client
  在安装cx_Oracle之前,先安装Oracle客户端。
  
  cx_Oracle
  cx_Oracle是一个遵循Python数据库API接口的扩展模块,可通过她对Oracle进行操作。
  目前,可从此地址下载:http://cx-oracle.sourceforge.net/
  我下载的是针对Python2.7、Oracle11g、Win32的版本:cx_Oracle-5.1.3-11g.win32-py2.7.exe (md5)
  其安装过程如一般软件。
  
  在代码中即可引入cx_Oracle对数据库进行操作。如以下代码:
  查询数据


DSC0000.gif DSC0001.gif


#coding=utf-8
#!/usr/bin/python
import cx_Oracle;
conn = None;
cursor = None;
try:
conn = cx_Oracle.connect('userid/password@xx.xx.xx.xx/sid');
cursor = conn.cursor();
cursor.execute('select t.empno, t.ename from scott.emp t');
# 取回的是列表,列表中包含元组
list = cursor.fetchall();
print list;
for record in list:
print "Record %d is %s!" % (record[0], record[1]);
except Exception as e:
print ('Error : {}'.format(e));
finally:
cursor.close;
print 'cursor closed';
conn.close;
print 'connection closed';

View Code  
  插入数据





#coding=utf-8
#!/usr/bin/python
import cx_Oracle;
import time;
conn = None;
cursor = None;
try:
conn = cx_Oracle.connect('userid/password@xx.xx.xx.xx/sid');
cursor = conn.cursor();
tuple = ('1001', 'Nick Huang');
cursor.execute("insert into scott.emp (empno, ename) values (:1, :2)", tuple);
conn.commit();
print 'Insert successfully.';
except Exception as e:
print ('Error : {}'.format(e));
finally:
cursor.close;
print 'cursor closed';
conn.close;
print 'connection closed';

View Code  
  更新数据





#coding=utf-8
#!/usr/bin/python
import cx_Oracle;
import time;
conn = None;
cursor = None;
try:
conn = cx_Oracle.connect('userid/password@xx.xx.xx.xx/sid');
cursor = conn.cursor();
tuple = ('Robin Chen', '1001');
cursor.execute("update scott.emp t set t.ename = :1 where t.empno = :2", tuple);
conn.commit();
print 'Update successfully.';
except Exception as e:
print ('Error : {}'.format(e));
finally:
cursor.close;
print 'cursor closed';
conn.close;
print 'connection closed';

View Code  
  删除数据





#coding=utf-8
#!/usr/bin/python
import cx_Oracle;
import time;
conn = None;
cursor = None;
try:
conn = cx_Oracle.connect('userid/password@xx.xx.xx.xx/sid');
cursor = conn.cursor();
param_map = {'id' : '1001'};
cursor.execute("delete from scott.emp t where t.empno = :id", param_map);
conn.commit();
print 'Delete successfully.';
except Exception as e:
print ('Error : {}'.format(e));
finally:
cursor.close;
print 'cursor closed';
conn.close;
print 'connection closed';

View Code  
  崎岖
  1、运行时,报如下异常,发现是Oracle客户端与cx_Oracle版本不一致导致的。
  我的Oracle客户端安装的是10g,cx_Oracle是11g的,我重新安装了10g的cx_Oracle就可以了。





D:\python27_workspace>"019.edit oracle.py"
Error : ORA-24315: illegal attribute type
View Code  
  2、报如下异常,一般为cx_Oracle不支持此种参数绑定方式





Error : ORA-01036: illegal variable name/number
View Code  如下面方式绑定一个参数,不知为何帮上述异常,后来换成元组的形式绑定参数,就OK了





#coding=utf-8
#!/usr/bin/python
import cx_Oracle;
import time;
conn = None;
cursor = None;
try:
conn = cx_Oracle.connect('apps/apps@192.168.0.206/PROD');
cursor = conn.cursor();
tuple = ('1001');
cursor.execute("delete from scott.emp t where t.empno = :1", tuple);
conn.commit();
print 'Delete successfully.';
except Exception as e:
print ('Error : {}'.format(e));
finally:
cursor.close;
print 'cursor closed';
conn.close;
print 'connection closed';

View Code  
  参考:
  http://blog.csdn.net/kongxx/article/details/7107661
  http://evil850209.iyunv.com/blog/1394932

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146357-1-1.html 上篇帖子: Python的模块 下篇帖子: Python学习随笔(2)之词汇语法约定
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表