python连接oracle

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 os

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'          #设置解码格式,使查询结果可显示中文
conn=cx_Oracle.connect('username/password@192.168.*.**:1521/servename')   #连接数据库(用户名/密码@IP:port/服务名)
c=conn.cursor()                                                   #获取cursor

c.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:
        #地址、端口、SID
        dsn = 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值