python链接oracle数据库
初次接触Oracle数据库,在安装方面碰到许多的环境问题,以此作为记录。
首先,python连接数据库不需要直接下载客户端oracle,这里用一个巧妙的方式,即安装PL/SQL Developer,不需要在本地安装oracle数据库,只需要在本机上配置plsql以实现远程数据库的连接。
首先我下载了cx_oracle,这个是python与oracle连接的一个库,要注意,你的cx_oracle版本千万要python版本严格一致,不然会报错,去官网下载对应版本即可。这里提供官网链接:https://pypi.python.org/pypi,查找cx_oracle下载whl文件。终端下执行本地安装命令 :pip install cx_Oracle-6.0rc1-cp37-cp37m-win_amd64.whl。
然后安装PLSQL,http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,这是Oracle Instant Client的下载首页,有很多种版本可供下载。这里要注意,要明白你的Oracle版本是多少位的,如果是32位,那么就搜32位的版本下载对应的instantclient文件夹,如果是64的也是一样,和你的电脑位数无关,如果这里不一致的话,后面启动PLSQL会报出初始化失败的错误。
然后就是一系列的安装就准备就绪了 ,我们找一个例子来测试下准备工作是否做好了。
代码:'''
import cx_Oracle
conn = cx_Oracle.connect('yn_bpa/water@10.207.10.168/myora')#'fkong/fkong@172.17.23.129/orcl'
cursor = conn.cursor()
print("连接成功!")
cursor.close()
conn.commit()
conn.close()
代码部分也有要说明的,比如cx_oracle.connect(),括号里填的是你实际数据库的用户名/密码@IP地址(根据本地或远程选择)/service name.我这里是远程数据库的service name.关于service name 这是数据库与客户端链接使用的服务名,通过该名字获取登录信息。如果你不知道自己的service_name,可以去查询一下。
调试了一下 ,我的pycharm报错了,也是比较常见的错误。
'''
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/。
我猜测是版本不一致的错误,python是64位的,而oracle instantclient 与oracle都是32位的,于是我果断下载32位的python尝试。进入conda 终端,发现在base环境无法下载32位的python,所以我新建了虚拟环境。用
'''
set CONDA_FORCE_32BIT=1,
切换至32位下。codna info 可以查看当前是32位还是64位。下载好32位的python以后,基本上达到了版本一致,也就大功告成了。
最后,发现还是报错,cannot load.....dll文件,于是百度了一下,说是把instantclient_11_2这个文件夹中的所有dll文件复制到python所在的目录就好了。由于 我创建的是子环境,所以我直接复制在了子环境的安装目录下。
最后,测试一下,连接成功。