python3连接oracle
文章目录
-
- 1 背景
- 2 步骤
-
- 2.1 安装cx_Oracle
- 2.2 安装 instantclient
- 2.3 查询SID
- 2.4 连接
-
- 2.4.1 方法1
- 2.4.2 方法2
- 2.4.3 方法3
- 3 问题点
-
- 3.1
1 背景
通过python连接oracle数据库,直接从数据库中抽取数据并进行计算分析
2 步骤
2.1 安装cx_Oracle
需要pip 安装cx_Oracle库
pip install cx_Oracle
2.2 安装 instantclient
2.3 查询SID
查询oracle的SID
select value from v$parameter where name like 'service_name%'
2.4 连接
2.4.1 方法1
代码如下:
import cx_Oracle
import pandas as pd
import osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #设置解码格式,使查询结果可显示中文
conn=cx_Oracle.connect('username/password@192.168.*.**:1521/servename') #连接数据库(用户名/密码@IP:port/服务名)
c=conn.cursor() #获取cursorc.execute("SELECT * FROM TABLENAME")
data=pd.DataFrame(c.fetchall()) #将查询结果转换为 DataFrame
colsname=c.description #获取列名称
namelist=[]for i in range(len(colsname)):namelist.append(colsname[i][0])
data.columns=namelist
data.set_index('colname',inplace=True) #设置 表 索引
print(data.head())
c.close() #关闭cursor
conn.close()
2.4.2 方法2
import os
import cx_Oracle as cx#设置ORACLE驱动位置
os.environ['path'] = r'D:\\Programs\\instantclient-basic-windows.x64-11.2.0.4.0\\instantclient_11_2'def connDB():try:#地址、端口、SIDdsn = cx.makedsn('172.17.2.43', 1521, 'edp')#账号、密码、服务器db = cx.connect('TEST', '123456', dsn)#创建游标curs = db.cursor()#组织查询语句sql = 'SELECT sysdate FROM dual'#执行语句rr = curs.execute(sql)#获取结果row = curs.fetchone()#列印结果print(row[0])#关闭游标curs.close()#关闭连线db.close()except Exception as e:print(e)if __name__ == '__main__':connDB()
2.4.3 方法3
import cx_Oracle as cx
import os
import pandas as pd#设置ORACLE驱动位置
os.environ['path'] = r'E:\\instantclient-basic-windows.x64-12.2.0.1.0\\instantclient_12_2'
#地址、端口、SID
dsn = cx.makedsn('地址',端口,'SID')
#账号、密码、服务器
db = cx.connect('账号', '密码', 服务器)#创建游标 员工形象
curs_ygxx=db.cursor()#组织查询语句
curs_ygxx.execute(
"""
WITH CANSHU AS
(
SELECT to_date(开始日期,'yyyymmdd') as 开始日期,to_date(结束日期,'yyyymmdd') as 结束日期,to_date(竞赛开始日期,'yyyymmdd') as 竞赛开始日期,to_date(竞赛结束日期,'yyyymmdd') as 竞赛结束日期
FROM HR_参数表
where 项目='门店6S'
)select to_char(检查日期,'yyyy-mm-dd') as 检查日期,
to_char(架构日期,'yyyy-mm-dd') as 架构日期,
事业部,大区,区域,归属门店,被考核人姓名,工号 as 被考核人工号,身份证号码,职位 as 被考核人职位,不合格原因,扣款金额
from CDM_HR_门店6S_员工形象
where trunc(检查日期,'mm')=(SELECT 开始日期 FROM CANSHU)
"""
) data_ygxx=pd.DataFrame(curs_ygxx.fetchall()) #将查询结果转换为 DataFrame
colsname_ygxx=curs_ygxx.description #获取列名称
namelist_ygxx=[]
for i in range(len(colsname_ygxx)):namelist_ygxx.append(colsname_ygxx[i][0])
data_ygxx.columns=namelist_ygxx #添加表名称
3 问题点
3.1
若连接中提示:
databaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded
解决方法见链接:
https://blog.csdn.net/guimaxingmc/article/details/80360840