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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章