python and oracle


参考源


1 安装cx_Oracle, 这个是一个Python的扩展包,用来访问Oracle数据库的。Windows的安装文件可以到http://cx-oracle.sourceforge.net/这里去下载。

2 下载Oracle客户端(Oracle Instant Client),这个是Python扩展包所需要的。可以到http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html去下载。下载后解压到本地磁盘(例如:D:\oracle\instantclient_11_2),把它加入到环境变量的path中。

    下载basic版本


3. 测试

import cx_Oracle

db_conn = cx_Oracle.connect('usr/pwd@ip:1521/service_name')
cursor = db_conn.cursor()
cursor.execute('select * from test')
print cursor.fetchone()

print 'total num: %d'%cursor.rowcount
results = cursor.fetchall()

print 'total num: %d'%cursor.rowcount
for row in results:
    print row
cursor.close()
db_conn.close()



4. fetch()速度慢

    尝试用变量绑定的方式查询,但是一个语句(cursor.execute + cursor.fetchone)需要44s,后来发现在变量绑定之前,先用encode('gbk')转换一下,速度不到10ms,

    注意不要在cursor.execute()里做encode()

    测试时使用的变量值来自pandas,不知道是否和其有关

    另外,上述修改虽然会使速度正常,但是查询结果未必正确,需要加入以下几句


    import os

    os.environ['NLS_LANG'] = 'AMERICAN_CHINA.ZHS16GBK'

   import cx_Oracle


   其中的'AMERICAN_CHINA.ZHS16GBK' 可以在oracle中用

    select * from nls_database_parameters

    查询,似乎是关系到服务器和客户端的编码转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值