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

python3连接数据库工具类之Oracle

背景

在数据集成业务中集成会需要连接到Oralce读取和更新数据,定义一个用于连接 Oracle 数据库的工具类方便其他脚本中使用可以有以下好处:

  • 提升可维护性:集中管理配置信息和异常处理逻辑,修改配置或处理异常时只需在工具类一处操作。
  • 增强复用性:避免重复编写数据库连接和关闭代码,便于在不同模块使用,也利于添加新操作方法。
  • 保障安全性:封装敏感信息,实现统一权限管理,降低信息泄露风险。
  • 便于代码测试:可模拟数据库连接和操作,避免测试影响真实数据库。

直接上代码

#!/usr/bin/env python
# encoding: utf-8
# @author: Evan#chengwenit.com
# Pyhton访问Oracle工具类import cx_Oracle
from cjc_cfg import oracleconn  # 从配置文件中导入默认的 Oracle 连接信息class OracleDBClient:def __init__(self, user=None, password=None, host=None, port=None, sid=None):"""初始化数据库连接信息,默认从 cjc_cfg.oracleconn 获取:param user: 数据库用户名:param password: 数据库密码:param host: 数据库主机地址:param port: 数据库端口:param sid: 数据库SID"""self.user = user or oracleconn["user"]self.password = password or oracleconn["passwd"]self.host = host or oracleconn["host"]self.port = port or int(oracleconn["port"])  # 确保是整数self.sid = sid or oracleconn["sid"]self.connection = Noneself.cursor = Nonedef connect(self):"""建立数据库连接"""try:dsn = cx_Oracle.makedsn(self.host, self.port, sid=self.sid)self.connection = cx_Oracle.connect(user=self.user, password=self.password, dsn=dsn)self.cursor = self.connection.cursor()except cx_Oracle.DatabaseError as e:raise Exception(f"数据库连接失败: {e}")def disconnect(self):"""关闭数据库连接"""if self.cursor:self.cursor.close()if self.connection:self.connection.close()def _dict_fetchall(self, cursor):"""将查询结果转换为字典列表"""columns = [desc[0] for desc in cursor.description]return [dict(zip(columns, row)) for row in cursor.fetchall()]def execute_query(self, query: str, parameters=None):"""执行查询语句并返回字典格式结果"""try:if parameters:self.cursor.execute(query, parameters)else:self.cursor.execute(query)return self._dict_fetchall(self.cursor)except cx_Oracle.DatabaseError as e:raise Exception(f"查询执行失败: {e}")def execute_non_query(self, query: str, parameters=None):"""执行非查询语句(如 INSERT、UPDATE、DELETE)"""try:if parameters:self.cursor.execute(query, parameters)else:self.cursor.execute(query)self.connection.commit()except cx_Oracle.DatabaseError as e:self.connection.rollback()raise Exception(f"非查询语句执行失败: {e}")def execute_many(self, query: str, parameters_list):"""批量执行 SQL 语句"""try:self.cursor.executemany(query, parameters_list)self.connection.commit()except cx_Oracle.DatabaseError as e:self.connection.rollback()raise Exception(f"批量执行失败: {e}")
http://www.xdnf.cn/news/343513.html

相关文章:

  • Day19 常见的特征筛选算法
  • 零拷贝的简单复习
  • Python变量作用域
  • C PRIMER PLUS——第6-2节:二维数组与多维数组
  • nginx 实现动静分离
  • 火影bug,未保证短时间数据一致性,拿这个例子讲一下Redis
  • Android Studio Gradle 中 只显示 Tasks 中没有 build 选项解决办法
  • 【Science Advances】北京邮电大学突破:基于MEMS-超表面的多阶涡旋光束高速切换技术
  • 缓冲区溢出分析
  • Java网络编程:深入剖析UDP数据报的奥秘与实践
  • WordPress插件depicter存在SQL注入漏洞(CVE-2025-2011)
  • Nginx 配置多个监听端口
  • 文件包含漏洞
  • 【JavaEE】TCP/IP协议(模型)
  • 使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
  • 森林生态学研究深度解析:R语言入门、生物多样性分析、机器学习建模与群落稳定性评估
  • WPF主窗体子窗体关联方法
  • WPF中解决数据绑定不匹配的问题
  • 中继器的作用
  • AI开发跃迁指南(第三章:第四维度2——weaviate cloud、weaviate docker安装配置及使用连接示例)
  • 【计算机网络】用户从输入网址到网页显示,期间发生了什么?
  • Nginx1.26.2安装包编译安装并配置stream模块
  • V型球阀材质性能深度解析:专攻颗粒、料浆与高腐蚀介质的工业利器-耀圣
  • WEB UI自动化测试之Pytest框架学习
  • RedHat磁盘的添加和扩容
  • 计数排序-详解
  • 从新手到高手:jQuery 全面进阶之路
  • 数字电子技术基础(五十六)——JK触发器
  • crawl4ai能替代scrapy等传统爬虫框架吗?
  • windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper