1. python 访问oracle确实不像jdbc那样成熟,问题颇多
2. 用anaconda安装cx_Oracle模块比较简单,在Environments中搜索到cx_Oracle模块,下载安装即可。复杂的遇到安装
问题如何解决。
3. 验证cx_oracle模块是否成功的方法,进入python命令行,
>>> import cx_Oracle
>>>
没有报错,即是成功。
4. 值得注意的是,安装cx_Oracle模块,要保证版本的统一,位数的统一,即oracle数据库、oracle客户端和python环境、cx_oracle模块要保持一致(都是32位或者64位)。版本统一是指,cx_oracle模块会指明python的版本(2.7;3.6等等)和oracle数据库的版本(10;11;12等等)。如果不一致,就不要折腾了。
遇见问题:
1.cx_Oracle.DatabaseError: DPI-1005: unable to acquire Oracle environment handle
解决方法:问题本质是找不到oracle数据库的路径了,既然cx_oracle通过oci.dll访问数据库,那就让cx_oracle清晰的找到OCI.dll
扫描二维码关注公众号,回复:
2426473 查看本文章
网上有说配置oracle客户端的环境变量的;也有说把OCI.dll放到Anaconda3\Lib\site-packages中的;说法很多,目的是一致的。
我是将 oracle客户端的oci.dll, oraociei10.dll, oraocci10.dll放到Anaconda3目录下了。然后就可以了。
示例代码:
import cx_Oracle as oracle
def main():
#cx_Oracle.connect("用户名 / 密码@ Oracle服务器IP / Oracle的SERVICE_NAME")
db = oracle.connect('hive/[email protected]:1521/XE')
c=db.cursor() #获取cursor
x=c.execute('select * from us_tab') #使用cursor进行各种操作
rows = c.fetchall()
for row in rows:
for v in row:
print(v)
# x.fetchone()
c.close() #关闭cursor
db.close() #关闭连接
if __name__ == '__main__':
main()