python操作oracle:
记住这个地址:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
windows:
1.安装
pip install cx_Oracle
2.使用
报错如下:
Cannot locate a 64-bit Oracle Client library: "The specified module could not be found"
原因:你是用的python是64位的Oracle可能是32位,需要通过中间的工具建立连接oracle instantClient(Oracle客户端)
# windows解决方法:
1.下载链接
https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
2.随意放在一个目录下面,同时添加环境变量ORACLE_HOME
我下载的11.2版本的放在:E:soft-yumoracleinstantclient_11_2,具体看个人需求
然后建立了一个ORACLE_HOME的环境变量将如下路径放进去E:soft-yumoracleinstantclient_11_2
之后再E:soft-yumoracleinstantclient_11_2安装目录下面建一个tnsnames.ora 的文件配置内容如下
oral =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 这是ip)(PORT = 端口))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 数据库名)
)
)
3.将E:soft-yumoracleinstantclient_11_2文件夹下的oci.dll, oraocci12.dll,oraociei12.dll
拷贝到python.exe文件同级目录下(我使用的虚拟环境,所以放在C:UsersyztPycharmProjects est_envvenvScripts)
目录下面,你记得是用哪个根据自己的python.exe可以执行文件判断,之后重启pycharm一切ok.
linux解决方法:
1.下载软件安装(下载需要注册oracle账户)
地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
注意版本问题:同时注意python 的位数和oracle客户端以及数据库一致(比如64位的oracle需要的都是64位)
2.解压(解压好了之后就可以了)
cd /opt/ # 我放在了/opt目录
[root@localhost opt]# ls
instantclient_11_2 odbc_cli instantclient-basic-linux.x64-11.2.0.4.0.zip
v9.5fp9_linux390x64_odbc_cli.tar.gz
unzip instantclient-basic-linux.x64-11.2.0.4.0.zip # 解压出来 instantclient_11_2
3.配置tnsnames.ora文件(反正都有我感觉就是配置一个连接)
mkdir -p network/admin
cd network/admin
新建tnsnames.ora文件 # 记得把我的()和里面的注释删掉,记住括号也删掉
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 主机IP(我配置的和连接的ip不一样但是不影响连接))(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl(这东西和奇葩感觉就是库))
)
)
4.vim /etc/pfofile(加上下面的)
# oracle客户端配置
export ORACLE_HOME=/opt/instantclient_11_2
export TNS_ADMIN=/opt/instantclient_11_2/network/admin # 这里注意下tnsnames.ora文件在哪里配置那个目录,可以自定义
export LD_LIBRARY_PATH=$ORACLE_HOME # 这个是python查找文件时用的
export PATH=$ORACLE_HOME:$PATH
# 上面写完退出wq
命令行执行:source /etc/profile
5.我写了一个脚本,用来连接oracle数据库
[root@localhost opt]# cat test.py
import cx_Oracle
class OracleOpera(object):
def __init__(self, host, user, password, port="1521", database=""):
self.host = host
self.user = user
self.password = password
self.port = int(port)
self.database = database
def conn(self):
conn_url = "%s:%s/%s" % (self.host, self.port, "orcl")
self.conn = cx_Oracle.connect(self.user, self.password, conn_url)
self.cur = self.conn.cursor()
print("连接成功")
if __name__ == '__main__':
mysql_obj = OracleOpera("10.XX.XX.XX", "xxxx", "xxxxxx", "1521")
mysql_obj.conn()
6.连接测试
[root@localhost opt]# python3 test.py
连接成功
完成了ok
7.关于tnsnames.ora文件补充,有兴趣可以看
https://www.cnblogs.com/lixuwu/p/7127148.html
# 看了就会懂下面的sql是干嘛的
select INSTANCE_NAME from v$instance; # 查看某个数据操作句柄(也就是ORCL就是sid_name)
select name from V$database; # 查看集群操作句柄(这个是操作所有数据库集群的服务名)
# 举个例子在操作文件时fp = open(test.txt, "a")其中的fp就是句柄,拿到它你就可以操作text.txt文件,而
第二个sql可以理解为打开多个文件,但是oracle数据使用了一种集群方式,将操作多个文件句柄合并到了一个上面
参考:https://www.cnblogs.com/hanjianfei/p/11453790.html
需要的安装包:
链接:https://pan.baidu.com/s/1H0F48AG7J7MHwvwS-eM2zw
提取码:dfq0