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

windows 环境中 python连接到达梦库,及相关问题解决办法

首先安装python,达梦数据库,这里默认已经安装好了

目录

 1、安装达梦数据库(dmPython)驱动

        一、获取驱动文件

        二、复制文件

三、 安装驱动

2、测试安装

3、报错解决

        一、连接失败: returned a result with an exception set

1、验证驱动完整性:

2、检查依赖库

 3、检查数据库连接信息

二、连接失败: module 'dmPython' has no attribute 'connect'

1、检查关键文件是否存在

2、检查驱动与Python的兼容性 

三、命令行中能成功连接,但IDE/VSCode中却找不到dmPython模块

解决办法1:修改VSCode解释器路径

解决办法:2:复制驱动到VSCode环境 


 1、安装达梦数据库(dmPython)驱动

        一、获取驱动文件

        从达梦数据库安装目录获取 (通常位于 DM安装目录\drivers\python\dmPython)

        或从达梦官网下载对应版本的Windows驱动包

        二、复制文件

                找到达梦数据库安装目录中的dmPython文件夹

                将该文件夹复制到Python的site-packages目录下:

                通常路径为:C:\Python38\Lib\site-packages\

                确保目录结构如下:

 C:\Python38\Lib\site-packages\
└── dmPython
    ├── __init__.py
    ├── dmPython.pyd
    └── ...其他文件

如果不清楚python的安装路径,可以使用下面的方法确认一下:

打开cmd,运行:

where python

 或者 运行:

python -c "import sys; print(sys.executable)"

会输出 python的路径

 

三、 安装驱动

打开cmd,进入到  C:\Python38\Lib\site-packages\dmPython 目录中,(就是上一步复制文件夹后的目录),或者直接在文件夹路径栏输入cmd 回车,能快速打开cmd并进入到当前目录

 

然后输入

python setup.py install

 等待安装完成

安装完成后,会在 ......\Lib\site-packages\ 目录下看到  dmPython-2.5.8-py3.12-win-amd64.egg 目录

2、测试安装

 一、打开vscode

        创建.py文件

        输入:

import dmPython
import systry:conn = dmPython.connect(user='SYSDBA',password='SYSDBA',server='127.0.0.1',port=5236,connect_timeout=5  # 添加超时参数)print("连接成功!服务版本:", conn.server_version)conn.close()
except dmPython.Error as e:print("达梦原生错误:", e)
except Exception as e:print("通用异常:", sys.exc_info()[1])

import dmPython# 检查驱动是否包含关键方法
print("dmPython 可用方法:", [attr for attr in dir(dmPython) if not attr.startswith('_')])# 尝试建立连接(替换实际参数)
try:conn = dmPython.connect(user='SYSDBA',password='SYSDBA',server='localhost',port=5236)print("连接成功!")conn.close()
except Exception as e:print("连接失败:", e)

如果不方便创建文件,可以直接在vscode的终端里面,输入:

python -c """
import dmPython
try:conn = dmPython.connect(user='SYSDBA', password='SYSDBA', server='127.0.0.1', port=5236)print('连接成功!')conn.close()
except Exception as e:print('连接失败:', e)
"""

 然后回车运行,查看运行结果;

如果连接成功,则大功告成,如果报错,查看报错解决办法;

3、报错解决

        一、连接失败: <class 'dmPython.Connection'> returned a result with an exception set

         这个错误表明 dmPython 驱动虽然被成功导入,但在尝试建立数据库连接时,底层 C 代码抛出了异常但未能正确传递到 Python 层。

        核心排查步骤:

1、验证驱动完整性:
# 检查驱动文件是否存在
python -c "import os, dmPython; print(f'驱动路径: {os.path.dirname(dmPython.__file__)}')"

正常情况会打印驱动的路径,大概是:....\Lib\site-packages\dmpython-2.5.8-py3.12-win-amd64.egg

         如果没有这个目录,建议回到第1步,重新安装达梦驱动;

2、检查依赖库

        打开Windows PowerShell,进入到达梦数据库目录的 bin 目录中

        

运行下面两行: 

 ls *odbc*ls *dmdpi*

 运行结果:

重点查看是否存在这两个库文件,如果不存在可以冲其他相同环境下的windows中拷贝过来

 3、检查数据库连接信息

也有可能本地或远程不存在SYSDBA数据库,找一个DM管理工具可以确认连上去的数据库,然后使用把上述测试代码中的连接信息改成可以连接上去的数据库的连接信息,再重试

 

二、连接失败: module 'dmPython' has no attribute 'connect'

这个错误表明 dmPython 模块虽然能导入,但缺少关键的 connect 方法,这通常是由于驱动文件不完整或安装不正确导致的。

1、检查关键文件是否存在

python -c "import dmPython, os; print(os.path.dirname(dmPython.__file__))"

正常情况会打印驱动的路径,大概是:....\Lib\site-packages\dmpython-2.5.8-py3.12-win-amd64.egg

         如果没有这个目录,建议回到第1步,重新安装达梦驱动;

2、检查驱动与Python的兼容性 

python -c "import struct; print('Python位数:', struct.calcsize('P')*8, '位')"

正常情况下会输出:        Python位数: 64 位 

反正必须与达梦驱动架构一致,不能一个是 64位 一个是32位

如果不匹配,重装匹配的 Python 或达梦驱动(如达梦是64位,Python也需64位)

三、命令行中能成功连接,但IDE/VSCode中却找不到dmPython模块

        这是典型的Python环境配置不一致问题。

在终端执行命令:

where python
python -c "import sys; print(sys.executable)"

这两个命令都可以输出 python 安装路径。

在 vscode 的终端中也输入这两个命令,查看输出结果

如果路径不同​:说明两者使用了不同的Python解释器

解决办法1:修改VSCode解释器路径

  1. 在VSCode中按 Ctrl+Shift+P
  2. 输入 Python: Select Interpreter
  3. 选择与命令行相同的Python路径(即步骤上述命令输出的路径)

解决办法:2:复制驱动到VSCode环境 

在cmd中运行

python -c "import dmPython, os; print(os.path.dirname(dmPython.__file__))"

 会输出一段路径, 复制到VSCode环境的site-packages

cp -r <上述路径>/dmPython <VSCode的Python路径>/Lib/site-packages/

验证修复结果:在vscode中,运行 测试代码,记得替换下面的 xxx

import dmPython
print("模块路径:", dmPython.__file__)try:conn = dmPython.connect(user='xxx',password='xxx',server='xxx',port=5236)print("VSCode连接成功!")conn.close()
except Exception as e:print("VSCode连接失败:", e)

 

 

http://www.xdnf.cn/news/9383.html

相关文章:

  • TDengine 中的存储配置
  • 线程池详解:原理、使用与优化
  • 78. Subsets和90. Subsets II
  • Linux:基础指令与内涵理解(下)与权限
  • git 命令之-git cherry-pick
  • 短剧看广告APP系统开发:打造高效变现与用户体验双赢平台
  • 人工智能AI之机器学习基石系列 第 2 篇:数据为王——机器学习的燃料与预处理
  • JavaSE核心知识点04工具04-04(Git)
  • 专业教育机构视频网站平台播放器页面如何处理视频加密的?
  • [React]实现一个类zustand公共状态库
  • 2025上半年软考系统架构设计师选择题试题与答案
  • AI Agents执行流程和决策流程学习
  • 零基础设计模式——结构型模式 - 组合模式
  • RapidOCR4j项目学习
  • 润和星闪WS63E的MQTT示例程序存在的潜在问题
  • 经典查找算法合集(下)
  • 行为型:命令模式
  • 多语言实现插值查找算法
  • 理解vue-cli中的webpack
  • Minktec 柔性弯曲传感器,灵敏捕捉坐姿弓背、精准监测行走姿态,守护儿童背部健康,为科学健身提供数据支撑,开启职业健康与背痛 AI 干预新方向。
  • vue + ant-design + xlsx 实现Excel多Sheet页导出功能
  • 如何通过ETL对WebService进行调用
  • 顶会新方向:卡尔曼滤波+目标检测
  • Java 程序求圆弧段的面积(Program to find area of a Circular Segment)
  • Mico 1.33.1 | 解锁高级版 上千种自定义组件 动态壁纸
  • Java String函数的使用
  • 016搜索之广度优先BFS——算法备赛
  • word中表格拉不动以及插入图片有间距
  • MySQL的参数 innodb_force_recovery 详解
  • vue3+element-plus el-date-picker日期、年份筛选设置本周、本月、近3年等快捷筛选