返回顶部

python3.4连接和读取oracle数据表

[复制链接]
飘在云端Lv.9 显示全部楼层 发表于 2016-12-30 14:54:18 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【转载】

想用Python连接Oracle并查询数据表,就写了个Demo。参考了以下网址。

Python学习之 cx_Oracle学习记录 一
http://my.oschina.NET/bxxfighting/blog/386578
python——连接Oracle数据库
http://www.cnblogs.com/Leo_wl/p/3288402.html
通过SQLite了解数据库操作
http://www.cnblogs.com/fnng/archive/2013/05/26/3099547.html


先说安装cx_Oracle库。

用python连接Oracle需要借助cx_Oracle库。比如cx_Oracle目前最高支持到python3.4,那你安装python3.5就不行。
寻找cx_Oracle库的三个网址:
http://sourceforge.net/projects/cx-oracle/,这个网址貌似停止更新了,其最后更新时刻是2012年。
http://cx-oracle.sourceforge.net/,这个网址貌似是官网,它貌似是实时更新的。
https://pypi.python.org/pypi/cx_Oracle/,这个网址是Python官网的PyPI上的cx_Oracle地址,貌似是实时更新的。
由此可知,某开源库托管在SourceForge/Github上,但是SourceForge/Github上的代码/安装包可能不是最新的,最新的东西可能在其他网站上。所以,我们在找一个开源项目时,可能需要多找几个来源(github、SourceForge、开源项目的官网、其他的一些来源如编程语言的包管理网站、等),然后择新/择需选择下载和使用。
此时(2016年4月16日)我发现PyPI上说可以用pip install cx_Oracle安装cx_Oracle了,但是我实际安装时报错。最后下载的exe安装的它。

然后就是代码了。

[python] view plain copy


  • # Python 3.4.4rc1 (v3.4.4rc1:04f3f725896c, Dec  6 2015, 17:06:10) [MSC v.1600 64 bit (AMD64)] on win32  
  • # cx_Oracle-5.2.1-11g.win-amd64-py3.4.exe  
  • import cx_Oracle  
  •   
  • print("cx_Oracle.version:", cx_Oracle.version)  
  • host = "127.0.0.1"  
  • port = "1521"  
  • sid = "databasetopaz"  
  • dsn = cx_Oracle.makedsn(host, port, sid)  
  • connection = cx_Oracle.connect("scott", "tiger", dsn)  
  • cursor = cx_Oracle.Cursor(connection)  # 返回连接的游标对象  
  • print("======")  
  •   
  • sql = "select * from user_tablespaces"  
  • if True:  
  •     cursor.execute(sql)  
  •     for i in cursor:  
  •         print(i)  
  •     # cursor.execute(sql)  
  •     # print(len(cursor))# 抛出异常 TypeError: object of type 'cx_Oracle.Cursor' has no len()  
  •     # 虽然执行了cursor.execute(sql),但是cursor并没有存储查询操作返回的结果集,  
  •     # 它应该是实时从连接里面获取下一个结果的,所以它并不知道这个SQL总共查询得到了多少行结果。  
  •     # 所以对它执行len操作显然是错误的。  
  • print("======")  
  •   
  • sql = "select * from user_tables"  
  • if True:  
  •     print("cursor1:", cursor)  # 由打印的信息可以知道,cursor.execute语句之前的cursor和该语句之后的cursor是同等地位的。  
  •     cursor = cursor.execute(sql)  # 所以这个赋值语句是不必要的。另外,上面的例子和下面的例子也都没有执行赋值操作。  
  •     print("cursor2:", cursor)  
  •     results = cursor.fetchall()  # 将所有(剩余)的行作为序列的序列。  
  •     print("len(results):", len(results))  
  • print("======")  
  •   
  • sql = "select * from user_users"  
  • if True:  
  •     cursor.execute(sql)  
  •     while True:  
  •         result = cursor.fetchone()  # 把查询的结果集中的下一行保存为序列,或者None。  
  •         if result == None:  
  •             break  
  •         print("result:", result)  
  • print("======")  
  •   
  • connection.close()  
  • print("EXIT")  


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云萌主 云萌主-BIGSAAS旗下,由北京合智互联信息技术有限公司在2018年创立,为广大云应用技术爱好者的平台。在云萌主论坛可以查看云应用技术文章、云产品产品最新资讯、技术问答、技术视频。在畅游云上技术的同时,学到最新的云应用产品和技术。
  • 微信公众号

  • Powered by Discuz! X3.4 | Licensed | Copyright © 2001-2022, Aliyun Cloud. | 星点互联设计
  • 京ICP备18052714号 | 营业执照 | |合智互联| QQ