python连接oracle数据库,并读取数据表为dataframe格式
具体代码如下,代码中的中文部分需要自行修改成自己的相关信息。
#!/usr/bin/env python
#coding:utf-8
#导入数据模块
import cx_Oracle
import xlsxwriter
import time
import pandas as pd
from sshtunnel import SSHTunnelForwarder
#远程服务器及其上的数据库相关信息
userInfo = '数据库用户名/数据库密码'
dbStr = '@数据库所在的IP地址:1521/服务名' #oracle数据库端口号是1521
connstr = userInfo + dbStr
#映射到本地相关信息
LOCAL_PORT = 38399 #自行设置的本地对应端口号
DSN = "数据库用户名/数据库密码@localhost:%d/服务名" %LOCAL_PORT
#数据库语句示例
sql ='''
select * from wfdata.lt_patient_info where rownum<100
'''
# 1、不通过ssh来连接Oracle数据库直接用以下语句即可,此处我们需要配置SSH通道,所以不直接连接
# con = cx_Oracle.connect(connstr)
# cursor = con.cursor()
# query1 = cursor.execute(sql)
#2、通过ssh中间跳板机来连接Oracle数据库
with SSHTunnelForwarder(
('主机名', 22), #使用的SSH通道相对应的主机IP地址,即远程中间跳板机器的配置,端口默认22
ssh_username="用户名",
ssh_password="密码",
remote_bind_address=("数据库所在的IP地址", 1521), #远程数据库所在机器配置
local_bind_address=("127.0.0.1", LOCAL_PORT) #本地转发接口配置,与DSN的配置相关
) as server:
print("sshConnectSuccess") #可以打印一下看是否连接成功
#连接数据库,读取数据表
con = cx_Oracle.connect(DSN)
cursor = con.cursor()
query1 = cursor.execute(sql)
#将读取的数据保存为dataframe数据格式
data = pd.DataFrame(query1.fetchall())
print(data) #可以打印看一下数据的情况
#操作完成后记得关闭服务
cursor.close()
con.close()
参考:https://blog.csdn.net/weixin_34466671/article/details/113543254