> 文章列表 > python3连接oracle

python3连接oracle

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