python采用jdbc连接oracle

背景

之前写了一篇python采用jdbc连接kerberos认证的hive,本文是采用LDAP用户名和密码的方式连接Oracle,并且提供一种自动关闭游标和数据库连接的方式,方便使用;

方法

具体代码如下:

python 复制代码
class OracleConn:
    def __init__(self, username, password, url):
        self.username = username
        self.password =password
        self.url = url
        self.conn = None
        self.cursor = None
    def connect_oracle(self):
        import jaydebeapi
        self.conn = jaydebeapi.connect("oracle.jdbc.OracleDriver", self.url,
                                       [self.username, self.password],
                                       jars=["./oracle-driver-ojdbc.jar"]
                                       )
        self.cursor = self.conn.cursor()
    def __enter__(self):
        self.connect_oracle()
        return (self.conn, self.cursor)

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.cursor is not None:
            self.cursor.close()
        if self.conn is not None:
            self.conn.close()

采用如上的方式,我们创建了oracle的Conn和cursor,可以提供具体的代码;

ini 复制代码
username=""
password=""
url=""
with OracleConn(username, password, url) as (conn,cursor):
    cursor.execute("select * from xxx")
    result=cursor.fetchall()
    for r in result:
        print(r)

采用这种方式,我们可以不用自己释放数据库连接,在程序执行完成之后自动释放; 需要注意的是,我们在执行连接时需要加载oracle的jdbc的jar包,正常情况下,使用jaydebeapi执行一个进程时,只加载一次jdbc的jar包,第二次加载不生效,因此如果一个程序中要同时连接两个不同类型的数据库,要加载两个不同的jdbc的jar包时,在第一次连接时就应该加载所有的jdbc jar包,不然连接第二种类型的数据库时会报错;

相关推荐
TomEval5 小时前
【测AI】第11篇:深度学习基础 —— 神经网络是怎么工作的
人工智能·python·深度学习·神经网络·机器学习·aigc
zhang-ge5 小时前
python包和项目管理器uv在ubuntu下的安装与使用
开发语言·python·uv
for_ever_love__5 小时前
LangChain 降级、重试与超时:让服务在模型抽风时还能用
python·自然语言处理·langchain·agent·超时·重试·with_retry
MoRanzhi12035 小时前
第 8 篇 · 机器学习建模与实验评估:建模流程与对照实验
python·机器学习·scikit-learn·模型评估·交叉验证·shap·消融实验
棉猴5 小时前
玩游戏学Python9-算术运算符应用1
python·游戏·pygame·玩游戏·游戏编程
凤年徐6 小时前
【Python】Python 语法速通指南
开发语言·python
quantdash_cc6 小时前
量化数据清洗应该放在数据层还是策略层?从系统架构看清职责边界
开发语言·python·数据分析·系统架构·量化交易·股票数据·quantdash
梅雅达编程笔记6 小时前
Day 06 · 第一个 API 接口:从 Model 到 JSON
python·django·drf·后端开发·restful api·序列化器
yi0116 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
NineData7 小时前
Oracle 实时同步到 Doris 怎么做?全量迁移、CDC 增量复制与数据校验指南
数据库·oracle