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

这篇具有很好参考价值的文章主要介绍了使用pycharm连接读取orcl数据库的表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一、在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安装的是最新版,电脑也是最新版,无脑拣最新的上~
使用pycharm连接读取orcl数据库的表,pycharm,oracle,python

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

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

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

我的到步骤三就OK了,看自己情况
win11桌面右键,随便选一个显示设置/个性化,进入设置弹框页面,输入环境进行搜索
使用pycharm连接读取orcl数据库的表,pycharm,oracle,python
在用户变量新建一个变量名为instantclient,变量值为instantclient_21_12所在路径的东西
使用pycharm连接读取orcl数据库的表,pycharm,oracle,python
搞完后再次重启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)

以上两种代码都可以执行成功!!文章来源地址https://www.toymoban.com/news/detail-813756.html

到了这里,关于使用pycharm连接读取orcl数据库的表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 关于运用pycharm与数据库连接与实际操作

    关于运用pycharm与数据库连接与实际操作

         数据库通常需要与编译软件相连接,本文主要介绍关于python 编译器pycharm与数据库连接的过程。 首先,pycharm需要一些基础的配置。 个人建议配置:终端---pip install pymysql        插件----DB Navigator 具体操作如下: 首先打开pycharm并新建项目  新建完成后,打开终端(右下

    2024年02月13日
    浏览(12)
  • c# 从零到精通 读取连接数据库-并将数据填入dataGridView控件中

    c# 从零到精通 读取连接数据库-并将数据填入dataGridView控件中 using System; using System.Data; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Test01 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SqlConnection conn

    2024年02月09日
    浏览(14)
  • unity存储信息的方式,保存读取背包、游戏进度,连接MySQL数据库

    为了在Unity中存储信息,有几种方法可供选择。最常见的方法是 PlayerPrefs、Serialization和Database 。 PlayerPrefs是一种简单的存储小量数据(如玩家偏好或游戏设置)的方法。它易于使用,不需要任何外部库。但是,不建议用于存储大量数据或敏感信息。 Serialization是另一种在Unit

    2024年02月09日
    浏览(13)
  • 【PostgreSql】只删除整个数据库的表(不删除数据库)

    环境: windows 数据库: postgresql 前提: 此方法用来删除数据库所有的表,不包括保存的函数语句、查询语句等(可适用于需要删除整个数据库的数据却又不想删除数据库或者数据库正在连接无法被删除的情况) 查询数据库所有的表(假设表都在public模式下) 这个语句会列出

    2024年04月12日
    浏览(13)
  • 数据库的表和属性

    目录 1.元组 2.码 3.主码-主键 4.外码-外键 5.主键和外键的区别 6.数据库的存储过程 7.SQL的分类 8.数据库设计:ER图 概念:数据库中,每个表的每一行就是一个元组,表的每一列就是一个属性 即表中的列,唯一标识实体的属性 一个表中只能有一个主码 表中的一个属性是另一个

    2024年02月12日
    浏览(10)
  • sqlserver数据库创建自定义数据类型的表

    用户定义表数据类型是从SQL Server 2008开始提供的一种新功能。 本文主要向大家介绍了SQLServer数据库之Sqlserver 自定义表类型定义,使用,删除,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。 在sqlserver数据库中 创建自定义数据库类型,并且自定义数据类

    2024年02月06日
    浏览(8)
  • mysql如何查询数据库里的表

    要在MySQL中查询数据库里的所有表,你可以使用 SHOW TABLES 命令。 下面是步骤说明: 登录MySQL : 使用命令行工具登录到MySQL数据库。例如: 选择要查询的数据库 : 使用 USE [数据库名]; 来选择你要查询的数据库。例如,要选择名为 sampledb 的数据库,你可以运行: 查询数据库里的

    2024年02月06日
    浏览(14)
  • 学生信息数据库(stusys)的表结构和样本数据

    学生信息数据库(stusys)的表结构和样本数据

    #(1)创建数据库stuexpm create database stuexpm; #(2)创建studentinfo表,显示studentinfo表的基本结构 #表4.9 use stuexpm; create table StudentInfo ( StudentID varchar(6) not null primary key comment\\\'学号\\\', Name varchar(8) not null comment\\\'姓名\\\', Sex varchar(2) not null default \\\'男\\\' comment\\\'性别\\\', Birthdar date not null comment\\\'出生

    2024年02月05日
    浏览(10)
  • 查看服务器中数据库的表和数据

    要查看数据库中的表和表中的数据,您可以按照以下步骤进行操作: 1. 进入 MySQL 控制台。使用以下命令连接到 MySQL 控制台:    ```    mysql -u root -p    ```    输入 MySQL root 用户的密码并按 Enter 键。 2. 选择要查看的数据库。使用以下命令选择要查看表和数据的数据库:  

    2024年02月11日
    浏览(14)
  • spark sql 查看全部数据库的表

    大数据环境下,metastore一般都交个hive处理,随着数据库 表 越来越多,进行源数据管理的就会成为痛点,如何能够查询出所有的数据库下的所有表 Spark 官方文档Tables 官方给的sample中,只能一个库一个库查询,如果有成百上千个库呢? 从 Python 3.6 开始,Python f 字符串可用。

    2024年02月14日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包