使用pycharm连接读取orcl数据库的表

背景:工作需要
需求:使用pycharm访问远程oracle类型数据库的表,表中包含lob字段(这也是个坑!)

麻了,搞了一个星期,终于成功了,真可谓是每步都有坑,看的文章也有小一百篇了,我要及时把自己的踩坑路总结出来,希望对你有用哟~

目录

  • 一、在Pycharm中下载cx_Oracle包
  • 二、下载orcl instantclient
  • 三、复制3个dll后缀的文件至pychrm环境安装包的位置
    • ps:还不行的话去设置下环境变量
  • 四、查询表并输出数据框形式
  • 五、查询含有lob类型字段的表
    • 5.1 在Pycharm中下载sqlalchemy包
    • 5.2 查询数据库并访问表
      • 5.2.1 列表形式输出
      • 5.2.2 数据框形式输出

一、在Pycharm中下载cx_Oracle包

下载安装免费的Pycharm社区版参见pycharm Mac/windows(2022-2)之下载安装和设置中文
如果加载不成功,使用Anaconda Prompt在自己的环境中下载
我是在Pycharm终端执行如下代码

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cx_Oracle

然后开开心心运行,本以为到这里就成功结束了

import cx_Oracle as oracle
#
def main():
    # cx_Oracle.connect("用户名 /  密码@ Oracle服务器IP  /  Oracle的SERVICE_NAME")
    db = oracle.connect('XXX/XXX@IP地址:端口/sid_name')#换成自己远程要连的库
    c = db.cursor()  # 获取cursor
    x = c.execute("select * from XXX WHERE XXX")  # 使用cursor进行各种查询操作
    rows = c.fetchall()
    for row in rows:
        for v in row:
            print(v)
    c.close()  # 关闭cursor
    db.close()  # 关闭连接

if __name__ == '__main__':
    main()

然而上来就是个error!
Cannot locate a 64-bit Oracle Client library: “The specified module could not be found”.
开始了漫长而无头绪的检索和阅读和尝试!没用的略过,有用的两步如下:

二、下载orcl instantclient

鉴于我之前已经下载并解压好了instantclient_21_12,如没下载请转至Oracle客户端官网
因为我的pycharm安装的是最新版,电脑也是最新版,无脑拣最新的上~
在这里插入图片描述

三、复制3个dll后缀的文件至pychrm环境安装包的位置

以我的为例,我用的是vene环境,可以点文件-设置-python解释器查看当前使用的环境
在这里插入图片描述
最简单的方式,把instantclient_21_12中的这三个文件选中复制
在这里插入图片描述
直接在pycharm中点开vene/Lib/site_packages,粘贴进来
在这里插入图片描述
粘贴完成后,再次运行就成功了,不行的话重启一下pycharm
在这里插入图片描述

ps:还不行的话去设置下环境变量

我的到步骤三就OK了,看自己情况
win11桌面右键,随便选一个显示设置/个性化,进入设置弹框页面,输入环境进行搜索
在这里插入图片描述
在用户变量新建一个变量名为instantclient,变量值为instantclient_21_12所在路径的东西
在这里插入图片描述
搞完后再次重启pycharm试试

四、查询表并输出数据框形式

#运行成功
import cx_Oracle as cx
import pandas as pd
def visitOracle(sql):
    # cx_Oracle.connect("用户名 /  密码@ Oracle服务器IP  /  Oracle的SERVICE_NAME")
    conn = cx.connect('XXX/XXX@IP地址:端口/sid_name')#换成自己远程要连的库
    cursor = conn.cursor()
    cursor.execute(sql)  # 使用cursor进行各种操作
    # 读取字段名
    index = cursor.description
    row = list()
    for i in range(len(index)):
        row.append(index[i][0])
    # 获取返回信息
    data = cursor.fetchall()
    result = pd.DataFrame(list(data), columns=row)
    # 关闭链接,释放资源
    cursor.close()
    conn.close()
    return result

sql = "select * from XXX WHERE XXX'"
df = visitOracle(sql)
print(df)

如果是普通的表,是运行成功的,鉴于我的表有一个字段是长文本CLOB类型,所以它报错了
cx_Oracle.DatabaseError: DPI-1040: LOB was already closed
步骤五是我尝试成功的解决办法

五、查询含有lob类型字段的表

5.1 在Pycharm中下载sqlalchemy包

  • 使用pip install sqlalchemy 和设置那里安装均失败
  • SQLAlchemy · PyPI 安装指定版本也失败了
  • 使用镜像源安装成功!!
#pip3 install flask-sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple

5.2 查询数据库并访问表

5.2.1 列表形式输出

输出为外层列表,内里是元组的形式
[(number_value1,clob_value1),(number_value2,clob_value2),(number_value2,clob_value2)]

import cx_Oracle
# 连接到Oracle数据库
dsn = cx_Oracle.makedsn('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME')
conn = cx_Oracle.connect(user='YOUR_USERNAME', password='YOUR_PASSWORD', dsn=dsn)
# 查询SQL
query = "select {number_column}, {clob_column} FROM {table_name} where rownum<=5"
# 执行查询
cursor = conn.cursor()
cursor.execute(query)
# 获取所有行
rows = cursor.fetchall()
print(rows)
#获取所有行也可以换成如下,输出结果是一样的
for row in cursor:
    print(row)

5.2.2 数据框形式输出

#---------运行成功
import pandas as pd
import cx_Oracle
from sqlalchemy import create_engine

# 数据库连接信息
dsn_tns = cx_Oracle.makedsn('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME')
conn_string = f"oracle+cx_oracle://{YOUR_USERNAME}:{YOUR_PASSWORD}@{dsn_tns}"

# 创建数据库引擎
engine = create_engine(conn_string)

# 构建SQL查询语句
query = f"select {number_column}, {clob_column} FROM {table_name} where rownum<=5"

# 使用pandas的read_sql_query方法执行查询并获取结果
df = pd.read_sql_query(query, con=engine)
print(df)

# 关闭数据库连接
engine.dispose()

或者下面的代码,自定义一个函数的形式,实现多次调用。

##----运行成功
import pandas as pd
import cx_Oracle as cx
from sqlalchemy import create_engine
def visitOracle(sql):
    # 数据库连接信息
    dsn_tns = cx.makedsn(('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME')
    conn = f"oracle+cx_oracle://{YOUR_USERNAME}:{YOUR_PASSWORD}@{dsn_tns}"
    # 创建数据库引擎
    engine = create_engine(conn)
    # 使用pandas的read_sql_query方法执行查询并获取结果
    df = pd.read_sql_query(sql, con=engine)
    # 关闭数据库连接
    engine.dispose()
    return df

##诊疗记录
sql = "select {number_column}, {clob_column} FROM {table_name} where rownum<=5""
df = visitOracle(sql)
print(df)

以上两种代码都可以执行成功!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日OJ题_算法_滑动窗口⑤_力扣904水果成篮

目录 力扣904. 水果成篮 解析及代码1&#xff08;使用容器&#xff09; 解析及代码2&#xff08;开数组&#xff09; 力扣904. 水果成篮 904. 水果成篮 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这…

禅道:从安装到使用,一篇文章带你全面了解

博客前言&#xff1a; 在这个充满竞争和快节奏的世界里&#xff0c;项目管理已经成为了许多行业的关键环节。禅道作为一种功能强大、易用的项目管理工具&#xff0c;正在被越来越多的企业和团队所采用。它不仅能帮助我们高效地管理项目&#xff0c;还能提升团队协作和沟通的效…

竞赛保研 大数据房价预测分析与可视

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据房价预测分析与可视 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适合…

2023我的总结:读书、写作、运动、爱家人、学一门手艺

不知不觉中&#xff0c;2024年1月已过去大半了&#xff0c;按照惯例&#xff0c;还是对过去一年的所思所行做个简单的汇报。也希望我的一些经历&#xff0c;能给到正在做年终总结或新年规划的朋友&#xff0c;一些参考。 01 读书&#xff0c;是门槛最低的高贵 最近一段时间&am…

Jmeter对接口测试入参实现MD5加密

一、自带函数助手MD5加密 在函数助手中找到__MD5这个函数&#xff0c;第一个参数是要md5加密的值&#xff0c;第二个参数是保存加密后值的变量 在请求参数中引用该函数 发送请求可以看到密码加密了 二、beanshell脚本md5加密 在jmeter的lib目录下&#xff0c;自带commons-cod…

傲空间私有部署 Linux 指南

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 安装 docker 请下载对应的 Docker&#xff0c;安装完成后启动。Install Docker Engine on Ubu…

基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比(Matlab)

基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比&#xff08;Matlab&#xff09; 工程下载&#xff1a; HFSS的微带线特性阻抗仿真工程文件&#xff08;注意版本&#xff1a;HFSS2023R2&#xff09;&#xff1a; https://download.csdn.net/download/weixin_445…

定向减免!函数计算让 ETL 数据加工更简单

业内较为常见的高频短时 ETL 数据加工场景&#xff0c;即频率高时延短&#xff0c;一般费用大头均在函数调用次数上&#xff0c;推荐方案一般为攒批处理&#xff0c;高额的计算成本往往令用户感到头疼&#xff0c;函数计算推出定向减免方案&#xff0c;让 ETL数据加工更简单、更…

centos7安装nginx,按图文步骤操作

下载nginx&#xff1a; 官方网站&#xff1a;http://nginx.org/ 我这使用的版本是1.8.0版本。 1.nginx要求的安装环境 1.1、需要安装gcc的环境。 yum install gcc-c 1.2、第三方的开发包。 pcre PCRE(Perl Compatible Regular Expressions)是一个Perl库&#xff0c;包括…

Autosar信息安全入门系列01-SecOC基础介绍

本文框架 1. 概述2. SecOC基本概念2.1 SecOC是什么&#xff1f;2.2 新鲜度值与MAC值2.3 SecOC报文格式 3. SecOC报文发送及接收逻辑3.1 SecOC报文的发送3.2 SecOC报文的接收 1. 概述 本文为Autosar通信入门系列介绍&#xff0c;如您对AutosarMCAL配置&#xff0c;通信&#xf…

ChatGPT提示词保姆级教程

现在越来越多提示词教程&#xff0c;本文列个清单&#xff0c;方便以后整理&#xff0c;不定期更新&#xff0c;欢迎关注留言&#xff01; 后续更新欢迎关注 提示词&#xff08;prompt&#xff09;出来后&#xff0c;被称为一个新的岗位诞生&#xff0c;面向提示词工程师。 …

Mysql 索引 、事务、隔离级别

目录 索引&#xff08;index&#xff09; 1.为什么要有索引&#xff1f; 2.引入索引的代价 3.索引的操作 4.索引的使用场景 5.索引的底层原理 事务 (transaction) 事物的回滚是怎么做到的 事物的四大特性 并发执行事务带来的问题 隔离级别 索引&#xff08;index&…

OpenSource - 工具管理器easy-manager-tool

文章目录 功能说明运行配置环境配置启动docker部署 项目安全UI展示 Easy-Manager-Tool 打造软件行业首款集成工具&#xff0c;不管你是程序员&#xff0c;测试&#xff0c;运维等都可以使用该软件来提升自己的工作效率。 Easy-Manager-Tool 的诞生是为了解决软件行业众多参与者…

在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter

在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter 0. 背景1. 安装 docker-ce2. 安装 NVIDIA Container Toolkit3. 使用 nvidia-ctk 命令配置容器运行4. 通过 docker 运行 nvidia-smi5. 运行 gpu-jupyter6. 访问 gpu-jupyter7. 测试 gpu-jupyter 是否可以访问 cuda 0. 背景 今天突…

了解Vue中日历插件Fullcalendar

实现效果如下图&#xff1a; 月视图 周视图 日视图 官方文档地址&#xff1a;Vue Component - Docs | FullCalendar 1、安装与FullCalendar相关的依赖项 npm install --save fullcalendar/vue fullcalendar/core fullcalendar/daygrid fullcalendar/timegrid fullcalend…

485.最大连续1的个数

前言 这两天突然发现力扣上还是有我能写出来的题的&#xff0c;虽说都是简单级别的&#xff08;以及一道中等的题&#xff09;&#xff0c;但是能写出来力扣真的太开心了&#xff0c;&#xff08;大佬把我这段话当个玩笑就行了&#xff09;&#xff0c;于是乎&#xff0c;我觉…

class_10:this关键字

this关键字是指向调用对象的指针 #include <iostream> #include <iostream> using namespace std;class Car{ public://成员数据string brand; //品牌int year; //年限//构造函数名与类名相同Car(string brand,int year){cout<<"构造函数中&#…

自学C语言-4

第4章 运算符与表达式 了解了程序中常用的数据类型后&#xff0c;还应该懂得如何操作这些数据。因此&#xff0c;掌握C语言中各种运算符与表达式是必不可少的。本章致力于使读者了解表达式的概念&#xff0c;掌握运算符及相关表达式的使用方法&#xff0c;其中包括赋值运算符、…

ChatGPT给出的前端面试考点(Vue.js)

ChatGPT给出的前端面试考点&#xff08;Vue.js&#xff09; 答案 1. Vue.js是什么&#xff1f;它的主要特点是什么&#xff1f; Vue.js是一个渐进式JavaScript框架&#xff0c;用于构建用户界面。它的主要特点包括&#xff1a; 数据绑定&#xff1a;Vue.js使用双向数据绑定&…

【2015~2024】大牛直播SDK演化史

大牛直播SDK的由来 大牛直播SDK始于2015年&#xff0c;最初我们只是想做个低延迟的RTMP推拉流解决方案&#xff0c;用于移动单兵等毫秒级延迟的场景下&#xff0c;我们先是实现了Android平台RTMP直播推送模块&#xff0c;当我们用市面上可以找到的RTMP播放器测试时延的时候&am…