使用Python通过JDBC操作数据库(达梦数据库)

在某些场景下,我们可能需要借助Python语言来连接和操作数据库。

一、环境准备

首先,确保已安装以下软件并配置相关环境变量:

  1. Java Development Kit (JDK):由于JDBC是基于Java的API,因此需要在本地机器上安装JDK,并设置JAVA_HOME环境变量指向其安装目录。例如,在Windows环境下,可以通过以下命令设置:

    set JAVA_HOME=D:\ProgramFiles\Java\jdk1.8.0_40
    

    注意:请根据实际的JDK安装路径进行替换。

  2. 达梦数据库JDBC驱动:从达梦官方网站下载对应版本的JDBC驱动包(如DmJdbcDriver-1.8.0.jar),并将其保存到指定目录(如D:\DmJdbcDriver-1.8.0.jar)。这个JAR文件将在连接数据库时被jaydebeapi库引用。

二、安装jaydebeapi

使用Python的包管理器pip安装jaydebeapi库:

pip install jaydebeapi

三、编写Python代码

下面是一个使用jaydebeapi连接达梦数据库并执行SQL查询的示例代码:

import jaydebeapi
import os

# 设置Java环境变量(请根据实际情况调整)
os.environ['JAVA_HOME'] = r'D:\ProgramFiles\Java\jdk1.8.0_40'

def connect():
    # 定义数据库连接参数
    global url, user, password, result
    url = 'jdbc:dm://xx.xx.xx.xx:5236/cloud'
    user = 'SYSDBA'
    password = 'SYSDBA'
    driver_class = 'dm.jdbc.driver.DmDriver'
    jar_file = 'D:\DmJdbcDriver-1.8.0.jar'
    sql_str = 'select * from vm_template'

    # 建立JDBC连接
    conn = jaydebeapi.connect(driver_class, url, [user, password], jar_file)

    # 创建游标对象并执行SQL查询
    cursor = conn.cursor()
    cursor.execute(sql_str)

    # 获取查询结果并打印
    result = cursor.fetchall()
    for item in result:
        print(item)

    # 关闭游标和连接
    cursor.close()
    conn.close()

if __name__ == '__main__':
    connect()

解析代码:

  • 连接参数定义

    • url:JDBC连接字符串,格式为jdbc:dm://<hostname>:<port>/<database>。此处示例连接至IP地址为xx.xx.xx.xx、端口为5236的达梦数据库服务器上的cloud数据库。
    • userpassword:数据库用户名和密码,此处使用默认的SYSDBA账户。
    • driver_class:达梦数据库JDBC驱动类名。
    • jar_file:存放达梦数据库JDBC驱动包的路径。
    • sql_str:要执行的SQL查询语句。
  • 建立连接:调用jaydebeapi.connect()方法,传入上述参数创建到达梦数据库的JDBC连接。

  • 执行查询

    • 创建游标对象:通过conn.cursor()方法获取一个游标对象,用于执行SQL语句。
    • 执行SQL:调用游标的execute()方法执行sql_str中的查询语句。
    • 获取查询结果:调用fetchall()方法获取所有查询结果,并将其赋值给result变量。
  • 处理结果:遍历result列表,打印每一项查询结果。

  • 关闭资源:分别调用cursor.close()conn.close()方法关闭游标和数据库连接,释放系统资源。

现在,运行此Python脚本即可通过JDBC连接达梦数据库并执行SQL查询。根据实际需求,可以修改sql_str变量来执行其他类型的SQL语句(如INSERT、UPDATE、DELETE等),并相应地处理查询结果或返回值。

总结起来,通过jaydebeapi库,Python开发者能够便捷地利用JDBC接口与达梦数据库进行交互,从而在跨平台、跨数据库的环境中实现数据操作与分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/548106.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT 浅析

GPT 浅析 文章目录 GPT 浅析GPT 1无监督预训练有监督微调任务相关的输入变换 GPT2GPT3 GPT 1 在模型架构上&#xff0c;GPT-1基于Transformer构造&#xff0c;这是因为与其他卷积神经网 络或者循环神经网络相比&#xff0c;Transformer提供了效率更高的方法来处理文本 中的长期…

C#使用PaddleOCR进行图片文字识别✨

PaddlePaddle介绍✨ PaddlePaddle&#xff08;飞桨&#xff09;是百度开发的深度学习平台&#xff0c;旨在为开发者提供全面、灵活的工具集&#xff0c;用于构建、训练和部署各种深度学习模型。它具有开放源代码、高度灵活性、可扩展性和分布式训练等特点。PaddlePaddle支持端…

大世界基尼斯见证辉煌,云仓酒庄首届酒类培训新高度诞生

近日&#xff0c;一场规模盛大的酒类培训盛会&#xff0c;在云仓酒庄的精心组织下圆满落幕。此次培训活动以其卓着的成果和盛大的规模&#xff0c;创下了大世界基尼斯纪录&#xff0c;为酒类培训领域树立了新的标杆。这一成就的取得&#xff0c;背后是云仓酒庄团队无数的心血与…

【JAVA进阶篇教学】第一篇:JDK8介绍

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第一篇&#xff1a;JDK8介绍。 Java 8 引入了许多令人兴奋的新特性&#xff0c;其中包括 Lambda 表达式、Stream API、函数式接口、方法引用、默认方法等。下面我将为您详细介绍这些新特性&#xff0c;并提供相应的代码…

代码随想录刷题随记22-回溯2

代码随想录刷题随记22-回溯2 216.组合总和III leetcode链接 注意与之前的题目不同的是需要求和。从左到右的范围尝试模型。 class Solution { public:void backtrace(vector<vector<int>> &ret,int k,int n,int index,vector<int>& path,int &…

【XR806开发板试用】软件模拟IIC驱动OLED显示图片自己遇到的坑

前言 首先&#xff0c;非常感谢极术社区和全志举办此次开发板申请试用活动。由于自己水平太低&#xff0c;拿到板子后不知道要干点啥&#xff0c;偶然看见一个大佬写的I2C外设使用及控制OLED屏显示&#xff0c;文章中使用了硬件IIC控制OLED&#xff0c;正好我手里也有一块OLED…

【ElasticSearch】安装

1.官网寻找合适版本下载 这里我选择的是8.11.1 2.解压并启动 然后在浏览器输入http://localhost:9200/&#xff0c;判断是否启动成功 如下所示&#xff0c;则表示启动成功 安装过程中遇到过几个bug&#xff0c;记录在这篇文章中 【ElasticSearch】安装&#xff08;bug篇&am…

MySQL——基础

SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准 。 SQL 通用语法 SQL语句可以单行或多行书写&#xff0c;以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库…

mysql使用逗号分隔的一行数据转多行数据

文章目录 学习链接准备建表插入数据 方法MySQL逗号拼接的列拆分为多行&#xff08;不使用mysql.help_topic&#xff09;遇到字段以逗号分隔符分号分隔符存放多个值&#xff0c;需要一行转化多行&#xff0c;以用来关联&#xff08;使用mysql.help_topic&#xff09;改为LEFT JO…

git 上传代码到 github

准备工作 git Git LFS&#xff08;大文件>100Mb&#xff09; git 参考手册 github 建立仓库&#xff1a;New repository git 指令 git add . 用于将当前目录下的所有文件添加到 Git 仓库的暂存区中。 git add . 命令会将当前目录下的所有文件添加到 Git 仓库的暂存区中…

五、流程控制之循环

目录 5.1 步进循环语句for 5.1.1 带列表的for循环语句 5.1.2 不带列表的for循环语句 5.1.3 类C风格的for循环语句 5.2 while循环语句 5.2.1 while循环读取文件 5.2.2 while循环语句示例 5.3 until循环语句 5.4 select循环语句 5.5 嵌套循环 5.1 步进循环语句for for…

如何使用ArcGIS Pro进行路径分析

路径分析是一种空间分析技术&#xff0c;用于确定两个或多个地点之间最佳路径或最短路径&#xff0c;这里为大家介绍一下在ArcGIS Pro中如何进行路径分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的道路数据&#xff0c;除了道路数据&a…

大厂面试:获取字符串的全排列

一、概念 现有一个字符串&#xff0c;要打印出该字符串中字符的全排列。例如输入字符串abc&#xff0c;则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 可以基于回溯法来解决这个问题。 二、代码 public class Permutation {//输出字符串str的全…

【自媒体创作利器】AI白日梦+ChatGPT 三分钟生成爆款短视频

AI白日梦https://brmgo.com/signup?codey5no6idev 引言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI在各个领域都展现出了强大的应用潜力。其中&#xff0c;自然语言处理技术的进步使得智能对话系统得以实现&#xff0c;而ChatGPT作为其中的代表之一…

【Linux】磁盘阵列RAID技术

目录 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 1.2 为什么要使用RAID技术&#xff1f; 二、RAID级别 2.1 常见的RAID级别 2.2 常见RAID介绍 三、RAID特性对比 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 把多块独立的物理磁盘按不同的方式组合起来形成一个硬盘…

人工智能讲师大模型培训老师叶梓:基于大型语言模型的自主智能体:架构设计与应用前景

在人工智能的快速发展中&#xff0c;大型语言模型&#xff08;LLM&#xff09;已成为推动技术进步的关键力量。LLM的出现不仅改变了我们与机器的交互方式&#xff0c;也为构建具有高级认知能力的自主智能体&#xff08;AI Agent&#xff09;提供了新的可能性。本文旨在探讨基于…

(非技术) 基因遗传相关知识学习笔记

目录 一、基因遗传名词解释 二、什么叫显性遗传和隐性遗传&#xff1f; 三、如何确定遗传性质呢&#xff1f;是显性还是隐性&#xff1f; 四、常规例子1&#xff1a; 五、常规例子2&#xff1a; 六、实际案例&#xff1a; 七、思考题&#xff1a; 八、参考&#xff1a; …

云计算: OVN 集群 部署分布式交换机

目录 一、实验 1.环境 2.OVN 集群 部署云主机 3.中心端添加DVS分布式大二层交换机 二、问题 1.南向控制器查看主机名只显示localhost 2.中心端如何添加DVR分布式⼤三层路由器 一、实验 1.环境 (1) 主机 表1 宿主机 主机架构软件主要服务IP备注ovn_central中心端 ovn…

【Linux】基础I/O>文件系统软硬链接动静态库详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.C语言文件接口 1.1 hello.c写文件 1.2 hello.c读文件 1.3 输出信息到显示器 1.4 stdin & stdout & stderr 1.5 总结打…

Android Framework学习笔记(3)----Binder

什么是Binder&#xff1f; Binder是linux IPC机制的其中一种。它贯穿于应用层&#xff0c;framework层&#xff0c;以及linux Core层。 什么是IPC? 跨进程通信&#xff0c; InterProcess Communication. IPC机制都有哪些&#xff1f; 通道信号量消息队列BinderSocket共享内…