使用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()  # 获取cursorx = c.execute("select * from XXX WHERE XXX")  # 使用cursor进行各种查询操作rows = c.fetchall()for row in rows:for v in row:print(v)c.close()  # 关闭cursordb.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.descriptionrow = 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 resultsql = "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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft365管理员创建共享邮箱

​​​​​​ 创建共享邮箱 项目2023/08/2110 个参与者 反馈 本文内容 创建共享邮箱并添加成员您应使用哪些权限&#xff1f;阻止登录共享邮箱帐户向 Outlook 添加共享邮箱 显示另外 3 个 备注 如果你的组织使用的是混合 Exchange 环境&#xff0c;则你应使用本地 Excha…

SSH数据流量监控

简介 检查网络连接的数据传输情况有以下一些实际意义&#xff1a; 安全监控&#xff1a;检查数据传输情况可以帮助你识别异常活动或潜在的安全威胁。如果发现大量不寻常的数据传输活动&#xff0c;可能表示有未经授权的访问或恶意行为。通过监控数据传输&#xff0c;可以及时发…

阿里云地域和可用区分布表,2024更新

2024年阿里云服务器地域分布表&#xff0c;地域指数据中心所在的地理区域&#xff0c;通常按照数据中心所在的城市划分&#xff0c;例如华北2&#xff08;北京&#xff09;地域表示数据中心所在的城市是北京。阿里云地域分为四部分即中国、亚太其他国家、欧洲与美洲和中东&…

周五~~~摸鱼

学习也能很快乐哦~~&#xff01; vim /etc/motd 修改这个文件可以让你刚登录linux 系统显示图形效果 佛祖 效果&#xff1a; 自行车 效果&#xff1a; love \ ------------ / ------ \ \ …

CMake TcpServer项目 生成静态库.a / 动态库.so

CMake 实战构建TcpServer项目 静态库/动态库-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135608829?spm1001.2014.3001.5501 在这篇博客的基础上&#xff0c;我们把头文件放在include里边&#xff0c;把源文件放在src里边&#xff0c;重新构建 hehedali…

区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一…

Plane Geometry (Junior High School)

初中平面几何&#xff0c; ACBD, ∠CAD60&#xff0c;∠C40&#xff0c;求∠B Vertical Calculation-CSDN博客 Rectangular Area-CSDN博客

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

街机模拟游戏逆向工程(HACKROM)教程:[10]68K汇编add指令

我们之前已经介绍了move指令&#xff0c;从本章开始&#xff0c;我们会一步步介绍更多的M68K指令。 简介&#xff1a; add :加法指令 该指令的作用是[源操作数]加[目的操作数]&#xff0c;结果传递至[目的操作数]&#xff0c;[源操作数]保持不变。 例子&#xff1a;…

基于改进蝙蝠算法的三维航线规划算法

matlab2020a可正常运行 基于改进蝙蝠算法的三维航线规划资源-CSDN文库

Oracle 数据库备份与恢复的重要性与最佳实践

文章目录 一、备份的重要性二、备份工具-RMAN四、比较备份策略五、实例恢复六、完全恢复与不完全恢复七、备份与恢复脚本 引言&#xff1a; 在现代信息时代&#xff0c;数据已成为组织和企业最重要的资产之一。保护和恢复数据的能力对于确保业务连续性和减少潜在风险至关重要。…

Flink1.17 基础知识

Flink1.17 基础知识 来源&#xff1a;B站尚硅谷 目录 Flink1.17 基础知识Flink 概述Flink 是什么Flink特点Flink vs SparkStreamingFlink的应用场景Flink分层API Flink快速上手创建项目WordCount代码编写批处理流处理 Flink部署集群角色部署模式会话模式&#xff08;Session …

Java:选择哪个Java IDE好?

Java&#xff1a;选择哪个Java IDE好? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…

线程基础知识点

1. 线程和进程的区别&#xff1f; 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当…

深度学习(1)--基础概念

目录 一.计算机视觉(CV) 二.神经网络基础 三.神经网络整体架构 一.计算机视觉(CV) (1).计算机视觉中图像表示为三位数组&#xff0c;其中三维数组中像素的值为0~255&#xff0c;像素的值越低表示该点越暗&#xff0c;像素的值越高表示该点越亮。 (2).图像表示 A*B*C&#xf…

list上

文章目录 初步了解list面试题&#xff1a;为什么会有list&#xff1f;vector的缺点&#xff1a;vector、list优点 list结构迭代器的分类list的简单运用insert、erase、迭代器失效&#xff08;和vector的区别&#xff09;erase class和structlist的迭代器为什么这个迭代器的构造…

【办公类-21-02】20240118育婴员操作题word打印2.0

作品展示 把12页一套的操作题批量制作10份&#xff0c;便于打印 背景需求 将昨天整理的育婴师操作题共享&#xff0c; 因为题目里面有大量的红蓝颜色文字&#xff0c;中大班办公室都是黑白单面手动翻页打印。只有我待的教务室办公室有彩色打印机打印&#xff08;可以自动双面…

深入详解使用 RabbitMQ 过程中涉及到的多个细节问题(面试可用)

目录 1、基础类问题 2、cluster 相关问题 3、综合性问题 4、参考资料 C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/125529931C/C基础与进阶&…

CVer从0入门NLP(二)———LSTM、ELMO、Transformer模型

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

iOS原生应用屏幕适配完整流程

1. 已iPhone 11 布局为设计布局,其他机型已这个来适配 2.变量与控件对应关系 txtViewer: txtAccount txtpwd seg btnOk 3.适配方法实现: //iOS屏幕适配 -(vo