当前位置: 首页 > news >正文

详细分析Python链接Oracle的多种方式(附Demo)

目录

  • 前言
  • 1. SQLAlchemy
  • 2. oracledb
  • 3. cx_Oracle

前言

库/包描述优点缺点使用场景
oracledbOracle 官方 Python 客户端库。 - 官方支持
  • 直接与 Oracle 数据库交互
  • 配置灵活 - 配置可能较为复杂
  • 主要用于直接数据库操作,不支持 ORM 需要直接与 Oracle 数据库交互的场景
    cx_Oracle Oracle 官方 Python 客户端库。 - 官方支持
  • 功能全面
  • 适用于多种 Oracle 数据库操作 - 安装和配置较复杂
  • 需要手动管理连接和资源 直接数据库操作,支持复杂查询
    SQLAlchemy 通用的 SQL 工具包和 ORM,支持多种数据库,包括 Oracle。 - 支持多种数据库
  • 提供 ORM 功能,简化数据库操作
  • 统一接口 - 学习曲线陡峭
  • 对于简单操作可能过于复杂 需要 ORM 支持或跨数据库操作场景

1. SQLAlchemy

推荐使用这个包,写的比较详细:详细分析Python中的SQLAlchemy库(附Demo)

2. oracledb

官方提供的 Python 客户端库,用于连接和操作 Oracle 数据库

是 cx_Oracle 的继任者,并在很多方面进行了改进和优化

  1. 安装与配置pip install oracledb

  2. Oracle 客户端:需要 Oracle Instant Client
    安装路径需要在系统环境变量中配置,或者在代码中指定路径

import oracledb
oracledb.init_oracle_client(lib_dir=r"D:\instantclient_21_10")
  1. 连接数据库
    连接字符串(DSN):可以使用 DESCRIPTION 或 TNS 配置字符串。支持直接的 IP 地址和端口,或使用 TNS 名称
connection = oracledb.connect(user='username', password='password', dsn=dsn)
  1. 执行 SQL 查询
    使用 cursor 对象来执行 SQL 语句
cursor = connection.cursor()
cursor.execute("SELECT * FROM my_table")
results = cursor.fetchall()
  1. 事务管理
    提交事务:需要显式地调用 commit(),connection.commit()
    回滚事务:需要显式地调用 rollback(),connection.rollback()
    错误处理:通过捕获异常来处理数据库操作中的错误
try:# 执行操作pass
except oracledb.DatabaseError as e:print(e)
  1. 游标与连接管理
    关闭游标和连接:在完成数据库操作后,需要关闭游标和连接以释放资源
cursor.close()
connection.close()

最终的测试Demo如下:

import oracledb# 数据库连接信息
dsn = ("(DESCRIPTION=""(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.197.0.200)(PORT=1521)))""(CONNECT_DATA=(SERVICE_NAME=prod)))"
)
username = 'root'
password = 'root'
oracledb.init_oracle_client(lib_dir=r"D:\instantclient_21_10")
# 创建连接
connection = oracledb.connect(user=username, password=password, dsn=dsn)try:# 创建一个游标cursor = connection.cursor()# SQL 查询语句sql_query = """sql语句"""# 执行查询cursor.execute(sql_query)# 获取所有结果results = cursor.fetchall()# 打印结果for row in results:print(row)
except Exception as e:print(e)finally:# 关闭游标和连接cursor.close()connection.close()

3. cx_Oracle

Python 中连接 Oracle 数据库的官方库

支持多种 Oracle 数据库功能,并且是 Oracle 官方推荐的客户端库之一

和上面同理,配置一个客户端,讲讲差异之处

特性优点缺点
性能高性能,支持大数据量处理和高并发操作-
功能支持复杂的数据库功能,如绑定变量、批量操作、PL/SQL 存储过程-
官方支持由 Oracle 官方提供和维护,确保兼容性和稳定性-
配置复杂性-配置 Oracle 客户端和库可能较为复杂
库更新频率-版本更新可能较慢,需关注新版本的兼容性
资源管理-需要手动管理连接和游标,资源管理较为繁琐
多线程支持具有良好的多线程支持,可以在多线程环境下高效运行-

最终的测试Demo如下:

import cx_Oracle# 设置 Oracle 客户端库路径
cx_Oracle.init_oracle_client(lib_dir=r"D:\instantclient_21_10")# 连接数据库
dsn = cx_Oracle.makedsn('10.197.0.200', 1521, service_name='prod')
connection = cx_Oracle.connect(user='root', password='root', dsn=dsn)# 执行查询
cursor = connection.cursor()
query = """
sql语句
"""
cursor.execute(query)
results = cursor.fetchall()# 打印结果
for row in results:print(row)# 关闭游标和连接
cursor.close()
connection.close()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • “从头开始训练模型,几乎没有意义”
  • 【亲测有效!】ubuntu20.04和Centos7离线安装docker及nvidia-container-toolkit
  • 从零搭建React全家桶框架教程:快速搭建react+react-router+redux项目
  • 新专利:温室土壤温湿度预测模型构建方法和程序产品
  • day09——集合ArrayList
  • vue使用富文本编辑器+自由伸缩图片
  • 在Linux下编译安装Python3.10.0及以上环境(解决了openssl依赖问题)
  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级
  • git update-git-for-windows 升级失败
  • django项目中通用的分页组件
  • 【深度学习实践】基于深度学习的图像去雾算法-ChaIR-实践
  • Unity游戏开发
  • unity 本地使用Json(全套)
  • JMeter常见的高频面试题整理
  • RCE漏洞函数
  • 【刷算法】求1+2+3+...+n
  • Android 控件背景颜色处理
  • express如何解决request entity too large问题
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java Agent 学习笔记
  • JavaScript 奇技淫巧
  • nodejs实现webservice问题总结
  • PHP 7 修改了什么呢 -- 2
  • Spark学习笔记之相关记录
  • 从输入URL到页面加载发生了什么
  • 番外篇1:在Windows环境下安装JDK
  • 浮动相关
  • 给github项目添加CI badge
  • 蓝海存储开关机注意事项总结
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 你真的知道 == 和 equals 的区别吗?
  • 前言-如何学习区块链
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深度学习在携程攻略社区的应用
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务入门【系列视频课程】
  • 移动端 h5开发相关内容总结(三)
  • 源码安装memcached和php memcache扩展
  • 智能网联汽车信息安全
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • ${factoryList }后面有空格不影响
  • (2)Java 简介
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (笔记)M1使用hombrew安装qemu
  • (分类)KNN算法- 参数调优
  • (论文阅读40-45)图像描述1
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (五)关系数据库标准语言SQL
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET delegate 委托 、 Event 事件,接口回调