Python读取Oracle数据库方法

最近给一台新电脑做python读取Oracle数据库的脚本时,遇到的问题,在这里总结一下。

需要的软件/包等

python

这个就不用多说了,我用的是3.8版本,其他版本按照我的方法参考就行

cx_Oracle

这个是Oracle提供的官方Python模块cx_Oracle,我的是8.3.0版本,安装方法:

pip install cx_Oracle

Oracle Instant Client

这个是重点,因为只在python中安装cx_Oracle,会报错,内容为:

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/latest/user_guide/installation.html for help

这个错误表明你的Python环境无法找到64位的Oracle客户端库。这可能是由于你的系统上没有安装64位的Oracle客户端,或者Python无法找到这个库。
实际上就是因为这台电脑没有Oracle客户端,如果安装一个Oracle数据库会非常麻烦,占空间不说,还会影响电脑本身的运行,所以,官方出了Oracle Instant Client,只要几十兆,无需安装,直接解压缩就可以使用的包

Oracle Instant Client下载

在官网下载即可:Oracle Instant Client下载 这个下载地址是win64位系统的,具体版本找自己适合的就行
Python读取Oracle数据库方法_第1张图片
注意:Oracle 的标准客户端-服务器网络互操作性允许不同版本的 Oracle 客户端库之间的连接和甲骨文数据库。 总之,Oracle Client 21 可以连接到 Oracle Database 12.1 或更高版本。 Oracle 客户端 19、18 和 12.2 可以连接到 Oracle 数据库 11.2 或 大。Oracle Client 12.1 可以连接到 Oracle Database 10.2 或 大。Oracle Client 11.2 可以连接到 Oracle Database 9.2 或更高版本。这 创建连接的技术限制可能更灵活。为示例 Oracle 客户端 12.2 可以成功连接到 Oracle 数据库 10.2。

因为我链接到的数据库用 12.1.0.2.0版本就可以,我就以此版本为例讲解
点击12.1.0.2.0,选择第一个进行下载,第一个是标准版,第二个是标准精简版,我用的是第一个,下载的压缩包大概69M,注意这里会提示登录,没有Oracle账号的自己注册一个就行
Python读取Oracle数据库方法_第2张图片

Oracle Instant Client解压缩

将下载的压缩包放到你想放到的文件夹下面,我方的是C:\ProgramData\Oracle 里面,并解压缩到当前文件夹即可,解压出来的文件夹名称为instantclient_12_1 ,记住这个路径,一会需要用。
注意,解压缩即可,不需要再有什么安装之类的步骤,Oracle Instant Client就是免安装的。
Python读取Oracle数据库方法_第3张图片
到这里,正常需要配置下环境变量,不过因为我公司的电脑具有权限管理,我没有管理员权限,无法配置环境变量,所以需要在python代码中完成这个功能,下面会进行讲解
到这里Oracle Instant Client部分完成

python代码编写

具体的代码编写,可以看下我另一篇文章:Python使用cx_oracle提取表数据,并且转存到MySQL数据库

如果你完成 Oracle Instant Client 部分,并配置了环境变量,可以直接参考上述文章的代码,但是,如果你也没有配置环境变量,需要在代码中做一个小修改,如果不做这个修改,直接运行的话会报错,就是刚才说的没有Oracle客户端,现在,来更改下代码

代码的第一行就是引入cx_Oracle 包,只要在后面加上下面的代码即可

import cx_Oracle as cx
cx.init_oracle_client(lib_dir=r"C:\ProgramData\Oracle\instantclient_12_1")

简单解释下,就是cx_Oracle 连接的是刚才解压缩的Oracle Instant Client,这样,代码就可以正常运行,读取Oracle数据库了

你可能感兴趣的:(数据库,python,oracle)