iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Python连接oracle的问题记录与解决
  • 893
分享到

详解Python连接oracle的问题记录与解决

Python连接oraclePythonoracle 2023-04-19 06:04:58 893人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录技术框架开发步骤一、安装cx_oracle二、编写数据库操作类三、输入订单号,执行查询四、格式化打印五、打印效果问题记录后期优化昨日晚平台升级,我们成功送BUG上线,今天系统问题又多了起来,大多数时候的运维问题需要根

昨日晚平台升级,我们成功送BUG上线,今天系统问题又多了起来,大多数时候的运维问题需要根据业务反馈的#订单号# 查询到当前状态,然后再进行反馈和处理。

每次看到运维问题前都要去打开plsql工具进行数据库查询,或者登录到系统里面进行查看,然后再进行具体的回复和处理。

以上是需求背景

能否写一个程序?实现一步操作把常用的信息都查询出来,省去打开数据库工具和重复编写/修改脚本的繁琐操作。

通过查找资料,写了一个,碰到不少问题,特意记录下来。

技术框架

开发语言:python,数据库:oracle,第三方库:cx_Oracle(用于Python和oracle的连接),prettytable(用于表格化输出展示数据)

开发步骤

一、安装cx_Oracle

pip install cx_Oracle

参考官方说明文档: cx-oracle.readthedocs.io/en/latest/user_guide/installation.html

二、编写数据库操作类

直接使用了chatgpt提供的代码,因为我只用到了查询方法,所以只查没有增删改,另外考虑到要同时查询多次数据,所以自己修改了实现了一个连接池的功能。

import cx_Oracle
import queue

class OracleDatabase:
    # 构造函数,传入数据库连接参数
    def __init__(self, user, pwd, dsn, size):
        self.user = user
        self.pwd = pwd
        self.dsn = dsn
        ## 定义连接池
        self.size = size
        self.conn_queue = queue.Queue(maxsize=self.size)
        for i in range(self.size):
            self.conn_queue.put(self._create_connection())

    # 创建数据库连接
    def _create_connection(self):
        return cx_Oracle.connect(self.user, self.pwd, self.dsn)
  
    # 从连接池里面获取连接
    def _get_conn(self):
        conn = self.conn_queue.get()
        if conn is None:
            self._create_connection()
        return conn

    # 将连接put到连接池中
    def _put_conn(self, conn):
        self.conn_queue.put(conn)

    # 关闭所有连接
    def _close_conn(self):
        try:
            while True:
                conn = self.conn_queue.get_nowait()
                if conn:
                    conn.close()
        except queue.Empty:
            print(">>>>数据库连接全部关闭<<<<")
            pass 

    # 执行查询语句
    def query(self, sql, params=None):
        res = []
        conn = self._get_conn()
        cursor = conn.cursor()
        try:
            if params:
                cursor.execute(sql, params)
            else:
                cursor.execute(sql)
            rows = cursor.fetchall()
            for row in rows:
                res.append(row)
        except Exception as e:
            print(str(e))
        finally:
            cursor.close()
            self._put_conn(conn)
        return res

三、输入订单号,执行查询

if __name__ == '__main__':
    user = "user_dba"
    pwd = "user_passWord"
    dsn = cx_Oracle.makedsn('0.0.0.0', '1521', service_name='s_demo_db')
    db = OracleDatabase(user, pwd, dsn, 2)
    cl_code = input("输入订单号: ").strip()
    
    print("数据信息展示:")
    sql_1 = """select *
		  from table_demo c
		  where c.cl_code = :cl_code"""

    results_1 = db.query(sql_1, [cl_code])
	print(results_1)
	# ......

四、格式化打印

安装prettytable

pip install PrettyTable

示例代码

from prettytable import PrettyTable

## 接着第三部分的代码
tb_1 = PrettyTable(['**号', '**时间', '当前状态', '单号', '机构'])
for rs_1 in results_1:
	tb_1.add_row([rs_1[0], rs_1[1], rs_1[2], rs_1[3], rs_1[4]])
print(tb_1)

五、打印效果

使用效果如下:粘贴订单号回车,直接返回下面所需要的信息数据(测试数据):

详解Python连接oracle的问题记录与解决

问题记录

第一个问题就是安装 cx_Oracle的时候出错:

ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects

解决方式:安装Microsoft c++ 生成工具,Microsoft C++ 生成工具 - Visual Studio,更改安装目录,按照默认选项安装即可。

报错信息

cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library:"The specified module could not be found".See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

解决方式:复制oracle客户端(客户端下载见问题3)目录中的oci,oraocci11,oraociei11的3个DLL粘贴到你的Paython目录的Lib/site-packages文件夹下面。

报错信息

cx_Oracle.DatabaseError: DPI-1072: the Oracle Client library version is unsupported

下载oracle客户端,并解压安装。下载地址:oracle.GitHub.io/odpi/doc/installation 我出现这个问题,是因为我本机原来安装的是19.18版本,换成11.2版本的客户端,按照问题2的操作,将三个dll文件重新复制过去,解决问题。

详解Python连接oracle的问题记录与解决

后期优化

  • 将sql语句集中放到配置文件里面,并配置表头,可以实现多查询自由扩展。
  • 通过BAT脚本调用执行,真正实现一键查询。

以上就是详解Python连接oracle的问题记录与解决的详细内容,更多关于Python连接oracle的资料请关注我们其它相关文章!

--结束END--

本文标题: 详解Python连接oracle的问题记录与解决

本文链接: https://www.lsjlt.com/news/201639.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Python连接oracle的问题记录与解决
    目录技术框架开发步骤一、安装cx_oracle二、编写数据库操作类三、输入订单号,执行查询四、格式化打印五、打印效果问题记录后期优化昨日晚平台升级,我们成功送BUG上线,今天系统问题又多了起来,大多数时候的运维问题需要根...
    99+
    2023-04-19
    Python连接oracle Python oracle
  • MySQL insert死锁问题解决详细记录
    目录Insert死锁问题剖析前置知识构造死锁原因故死锁产生的原因MySQL 5.7 的死锁前提示例原因解决方案总结Insert死锁问题剖析 线上有个批量的insert … on duplicate key ...
    99+
    2022-11-04
  • MySQL insert死锁问题解决详细记录
    目录Insert死锁问题剖析前置知识构造死锁原因故死锁产生的原因MySQL 5.7 的死锁前提示例原因解决方案总结Insert死锁问题剖析 线上有个批量的insert &hellip...
    99+
    2022-11-13
    mysql insert死锁 mysql死锁排查及解决 MySQL死锁
  • 解决python连接mysql报错问题
    解决python连接mysql报错问题最近跑python脚本时遇到一个问题,当sql语句中有中文时,执行python脚本报以下错误:Traceback (most recent call last):&nb...
    99+
    2022-10-18
  • 一则oracle 12c的bug问题解决过程记录
    一套新安装的12c 的主库和 dataguard 库中发现 alert 日志报错: 2018-07-30T22:04:17.522506+08:00 Non ...
    99+
    2022-10-18
  • 如何解决php 连接oracle乱码问题
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决php 连接oracle乱码问题?PHP 连接Oracle及乱码问题笔记1. PHP连接Oracle步骤1. 提取Oracle Instant Client核心D...
    99+
    2016-10-23
    php oracle
  • 怎么解决php连接oracle乱码问题
    本篇内容主要讲解“怎么解决php连接oracle乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决php连接oracle乱码问题”吧!php连接oracle乱码的解决办法:1、设置环...
    99+
    2023-06-25
  • python连接clickhouse的端口问题及解决
    目录python连接clickhouse端口问题向clickhouse导数据报错python连接clickhouse端口问题 <!-- It is the name th...
    99+
    2022-11-11
  • C#连接ORACLE出现乱码问题的解决方法
    目录方法一方法二方法三方法四以前做过java项目,连接各种数据库都得心应手,最近接触c#的一个项目,连接SqlServer数据库倒也是很好用,但是遇到oracle数据库就萎了,于是搜...
    99+
    2022-11-12
  • Oracle锁表解决方法的详细记录
    目录前言解决方法如下:总结前言 锁表或锁超时相信大家都不陌生,经常发生在DML语句中,产生的原因就是数据库的独占式封锁机制,当执行DML语句时对表或行数据进行锁住,直到事务提交或回滚...
    99+
    2022-11-13
  • 怎么解决使用Python连接Oracle数据库报错UnicodeEncodeError问题
    这篇文章主要介绍“怎么解决使用Python连接Oracle数据库报错UnicodeEncodeError问题”,在日常操作中,相信很多人在怎么解决使用Python连接Oracle数据库报错UnicodeEncodeError问题问题上存在疑...
    99+
    2023-06-02
  • 详解xshell远程连接自动断开的问题解决办法
    关于用xshell远程连接系统自动断开问题的解决办法: 1、服务器端的配置 我们都知道,作为服务器,默认一般都是被动的等待客户端的连接到来。但对基于ssh协议的xshell的运用,总是出现自动断开的情况。 vi命令打开/...
    99+
    2022-06-04
    xshell远程连接自动断开 xshell远程连接
  • 解决线上Oracle连接耗时过长的问题现象
    问题现象 1、远程Oracle数据库通过IP:PORT/SERVICE_NAME连接 2、应用服务通过Docker容器部署,访问Oracle联通性测试接口,需要50s左右才能返回连接...
    99+
    2022-11-12
  • Navicat连接不上MySQL的问题解决
    目录一、查看端口3306是否一样二、查看服务是否启动mysql密码忘记怎么办?总结解决Navicat连接不上Mysql的方法 一、查看端口3306是否一样 1、先登录上mysql,可以直接登录,或者cmd,从命令行那里进...
    99+
    2023-02-17
    navicat连接不上mysql navicat连接mysql报错 navicat连接不上数据库
  • 解决Qt6连接MySQL的驱动问题
    目录 1. 引出问题2. 分析问题3. 解决问题3.1 获取编译所需材料3.1.1准备生成Mysql驱动文件的工程3.1.2 准备Mysql相关的头、库文件 3.2 开始进行编译3.3 复制文件(重要)3.4 测试连接 4...
    99+
    2023-08-19
    mysql 数据库 qt c++
  • Android10自动连接WiFi问题的解决
    说明: 本文主要说明扫码之后自动连接WiFi的一些处理,扫码的流程相对简单,网上教程也比较多,对于目前Android各个版本也没有太多变化。 问题描述: 最近在做项目的时候,...
    99+
    2022-06-06
    自动 Android
  • 解决java连接zookeeper很慢的问题
    目录java连接zookeeper很慢记一次惨痛的zookeeper连接教训java连接zookeeper很慢 最近在学习zookeeper,但是在连接zookeeper服务端时很慢...
    99+
    2022-11-12
  • MySQL深分页问题解决的实战记录
    目录前言limit深分页为什么会变慢?通过子查询优化回顾B+ 树结构把条件转移到主键索引树INNER JOIN 延迟关联标签记录法使用between...and...手把手实战案例一...
    99+
    2022-11-12
  • 解决mysql连接超时和mysql连接错误的问题
    目录mysql连接超时和mysql连接错误连接MySQL错误create connection SQLException, url: jdbc:mysql://localhost:3306/*****解决方法mysql连...
    99+
    2022-07-11
    mysql连接超时 mysql连接错误
  • 怎么解决mysql连接过慢的问题
    这篇文章主要讲解了“怎么解决mysql连接过慢的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决mysql连接过慢的问题”吧! 3种解决方法(前...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作