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

news2024/11/18 4:31:35

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

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

一、在Pycharm中下载cx_Oracle包

如果加载不成功,使用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 查询数据库并访问表

#---------运行成功
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.coloradmin.cn/o/1377159.html

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

相关文章

全网最全持续集成接口自动化-jmeter+ant+jenkins

ant 批量执行Jmeter 一、环境准备 1、JDK环境&#xff1a;Java Downloads | Oracle 2、ANT环境&#xff1a;Apache Ant - Binary Distributions 3、Jmeter&#xff1a;Apache JMeter - Download Apache JMeter 4、将 jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant…

Whale 帷幄创始人叶生晅:AIGC 时代,营销的范式变了丨未来 AI 谈

「未来 AI 谈」是「Marteker 营销技术官」联合「Digital Frontier 首席数字官」共同发起的一档对话栏目&#xff0c;旨在探讨生成式 AI 的崛起对泛营销技术和营销自动化带来的影响&#xff0c;以期帮助全行业探索 AIGC 时代的新营销之路。 本期嘉宾&#xff1a;「Whale 帷幄」创…

【发票识别】支持pdf、ofd、图片格式的发票

背景 为了能够满足识别各种发票的功能&#xff0c;特地开发了当前发票识别的功能&#xff0c;当前的功能支持pdf、ofd、图片格式的发票识别&#xff0c;使用到的技术包括文本提取匹配、ocr识别和信息提取等相关的技术&#xff0c;用到机器学习和深度学习的相关技术。 体验 体…

显示器新赛道Type-C接口

如果把主机比作大脑&#xff0c;那显示器就是眼睛&#xff0c;没有眼睛&#xff0c;大脑再强大也发挥不出效果&#xff0c;所以显示器作为电脑最重要的输出设备&#xff0c;有着举足轻重的地位&#xff0c;可以说在生活中处处都有显示器的影子。其实显示器的历史也是科技发展史…

5288 SDH/PDH数字传输分析仪

5288 SDH/PDH数字传输分析仪 数字通信测量仪器 5288 SDH/PDH数字传输分析仪为高性能手持式数字传输分析仪&#xff0c;符合ITU-T SDH/PDH技术规范和我国光同步传输网技术体制的规定,支持2.048、34.368、139.264Mb/s及155.520Mb/s传输速率的测试。可进行SDH/PDH传输设备和网络的…

java返回链表中间节点

下面我用两种方式来演示 第一种&#xff1a;就是先求出链表长度&#xff0c;长度count,长度除2的值,再从头指针处走num-1次就是返回节点这也是我们常用方法&#xff0c;代码演示&#xff1a; class Solution {public ListNode middleNode(ListNode head) {if(headnull)return…

浅谈电动机监控系统在企业降碳过程中的作用 ——安科瑞 顾烊宇

1.前言 据《2017-2022年中国电力工业产业专项调查及十三五市场商机分析报告》显示&#xff0c;从我国目前全社会用电结构来看&#xff0c;工商业用户耗电量约占 80%&#xff0c;其中电机耗电约占工业用电的 75%&#xff0c;全国总耗电的 60%&#xff0c;是用户终端耗电占比较大…

怎样创建vue项目(分别基于vue-cli和vite两种的创建方式)

一、基于vue-cli脚手架创建 1、安装node.js 1、首先需要安装node.js&#xff0c;推荐下载地址&#xff1a;Node.js 2、检查是否安装成功&#xff0c;使用打开黑窗口的快捷键windowR&#xff0c;输入cmd&#xff0c;在黑窗口输入node -v&#xff0c;如果输出版本号&#xff0…

iOS 调试工具CocoaDebug

1、使用pod工具在项目里面添加CocoaDebug的SDK。 platform :ios, 11.0target ShopService doproject ShopServiceuse_frameworks!pod CocoaDebug, :configurations > [Debug]end2、之后就可以在项目里面看到效果了 APP上显示的是一个黑色背景的小圆圈。 上面39表示调用了39…

three.js 使用 tweenjs绘制相机运动动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

挖到宝啦,大部分人都不知道的企业内部知识库搭建方法

在竞争激烈的现代社会中&#xff0c;企业要取得成功&#xff0c;必须拥有自己的知识库。这是企业能力的一种体现&#xff0c;也是其取得竞争优势的主要途径之一。所谓知识库&#xff0c;就是把企业内部的各种知识&#xff0c;包括技术、管理、市场等方面的知识进行系统化、结构…

电脑删除文件夹时提示“已在另一个程序中打开”

我们在使用电脑删除某个文件夹&#xff0c;特别是一些程序卸载后的残留文件夹时&#xff0c;可能会出现“操作无法完成&#xff0c;因为其中的文件夹或文件已在另一个程序中打开”的弹窗提示。有些是可以在任务管理器中关闭某个进程的占用来解决&#xff0c;但是有些却难以找到…

idea使用ssh连接docker,并通过Dockerfile文件,直接在idea中启动docker应用,并进行远程debug

idea使用ssh连接docker&#xff0c;并通过Dockerfile文件&#xff0c;直接在idea中启动docker应用&#xff0c;并进行远程debug 第一步: idea通过ssh连接docker第二步&#xff1a;使用Dockerfile文件在远程启动应用第三步: 远程debug 容器运行的好处是减轻本地运行的负担(本地电…

挑选全身动作捕捉设备需要看哪几点?

随着数字化发展&#xff0c;虚拟数字人成为企业、品牌营销中不可或缺的一环&#xff0c;虚拟数字人可以通过全身动作捕捉设备&#xff0c;能够打破次元壁与用户实时互动。那要怎么挑选全身动作捕捉设备呢&#xff1f; 广州虚拟动力推出了旗舰版惯性动捕设备DreamsCap X1&#…

Arthas idea插件分析接口耗时

参考&#xff1a; https://www.cnblogs.com/yifanSJ/p/17720999.html IDEA集成Arthas排查接口耗时_idea查看接口每个方法运行时间插件-CSDN博客 1.本地启动arthas curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 2.本地访问arthas http:/…

电子签章系统,怎么做到大量文件自动电子签章?

在当今信息爆炸的时代&#xff0c;海量文件的签署管理成为各行业面临的挑战之一。电子签章系统的出现&#xff0c;为解决这一问题提供了有效途径。本文将探讨电子签章系统如何实现海量文件自动签章&#xff0c;提高工作效率并确保安全性。 钉钉、企微、飞书、OA、CRM、ERP等&a…

做一个个人博客第一步该怎么做?

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…

Vue3-watchEffect实现

原watch写法 watchEffect写法 全自动监视 官网:立即运行一个函数&#xff0c;同时响应式地追踪其依赖&#xff0c;并在依赖更改时重新执行该函数 watch 对比 watchEffect 都能监听响应式数据的变化&#xff0c;不同的是监听数据变化的方式不同watch : 要明确指出监视的数据 w…

RFID对分拣物料工序带来质的提升

RFID对分拣物料工序带来质的提升 物料分拣按照传统的人工辨认分拣&#xff0c;不仅效率不高还容易出现人为错误。分拣错误的货物流到后续生产工序可能导致产品只能报废处理&#xff0c;严重影响生产效率、报废处理还造成经济损失。现在的科技水平也推出不少替换人工的方案&…

云服务器哪家强?当属阿里云腾讯云or华为云?

云服务器哪家强?当属阿里云腾讯云or华为云&#xff1f;云服务器哪家便宜&#xff1f;2024最新整理你要的都在这&#xff01;头部云厂商阿里云、腾讯云、华为云、京东云、UCloud等都在降价&#xff0c;阿腾云atengyun.com分享2024年云服务器租用价格给你惊喜&#xff01; 便宜云…