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
查询,似乎是关系到服务器和客户端的编码转换