文章目录
- 前言
- 一、搭建demo
- 前提
- 初始化
- 简单demo
- 二、可能出现的异常情况
- DistutilsSetupError
- No module named 'dmPython'
- list报错
- 总结
前言
出于信创的考虑,近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用。
一、搭建demo
前提
需要以下前提
- 安装了python(本文使用了3.8.5)。
- 安装了达梦数据库并选择安装了驱动组件。
- 配置了 DM_HOME 环境变量为安装的达梦数据库路径(本文为D:\dmdbms)
- 在Path环境变量中添加dpi 的引用路径(本文为D:\dmdbms\drivers\dpi)
初始化
在CMD窗口下,进入达梦安装的python驱动路径下(本文为D:\dmdbms\drivers\python\dmPython),需要注意不同版本的python对应的驱动可能略有不同,
使用如下命令,完成python的达梦包的安装
python setup.py install
简单demo
首先先在达梦数据库中建立相应的账号以及对应的表,并将表中存放简单的测试书(本文建立了名称为TESTDM的账号,以及对应T_CITY_T,具体值如下)
打开python 的IDLE 工具,依次输入如下命令
>>> import dmPython
>>> conn=dmPython.connect(user='TESTDM',password='123456',server= 'localhost',port=5236)
>>> cursor = conn.cursor()
>>> cursor.execute('select "CITY_ID","CITY_NAME","REGION_ID" from "TESTDM"."T_CITY_T"')
>>> values = cursor.fetchall()
>>> print(values)
输出类似如下结果:
[('BJ ', '北京', 1), ('SJZ ', '石家庄', 1), ('SH ', '上海', 2), ('NJ ', '南京', 2), ('GZ ', '广州', 3), ('HK ', '海口', 3), ('WH ', '武汉', 4), ('CS ', '长沙', 4), ('SY ', '沈阳', 5), ('XA ', '西安', 6), ('CD ', '成都', 7), ('BJ ', '北京', 1), ('SJZ ', '石家庄', 1), ('SH ', '上海', 2), ('NJ ', '南京', 2), ('GZ ', '广州', 3), ('HK ', '海口', 3), ('WH ', '武汉', 4), ('CS ', '长沙', 4), ('SY ', '沈阳', 5), ('XA ', '西安', 6), ('CD ', '成都', 7), ('WLMQ ', '乌鲁木齐', 6)]
以上测试表明基于达梦的python开发环境搭建完成。
二、可能出现的异常情况
DistutilsSetupError
在进行达梦包安装时有时会出现如下类似错误:
Traceback (most recent call last):
File "setup.py", line 112, in <module>
raise SetupError(messageFormat % (userDmHome,DAMENG_VERSION))
distutils.errors.DistutilsSetupError: Dameng home (d:\dmdbms) does not refer to an DM8.1 installation or dmdpi library missing.
这时候需要通过IDLE工具逐步跟踪setup.py的脚本执行情况,可能出错行为
write_pystr='import os\nos.add_dll_directory(r\''+os.environ.get("DM_HOME")+'\\bin'+'\')'
需要调整为
write_pystr='import os \n os.add_dll_directory(r\''+os.environ.get("DM_HOME")+'\\bin'+'\')'
增加相应的空格即可。
No module named ‘dmPython’
在idle执行如下命令:
import dmPython
可能会出现
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
import dmPython
ModuleNotFoundError: No module named 'dmPython'
这时候需要采用如下方式
首先在CMD窗口中输入
pip list
确定是否存在 dyPython,如果不存在则需要进一步核查安装情况,如果存在,则需要关闭idle,再重新打开。
list报错
在安装完dmpython后,执行pip list 可能会出现如下错误
Error processing line 1 of D:\python385\lib\site-packages\dmPython.pth:
Traceback (most recent call last):
File "D:\python385\lib\site.py", line 169, in addpackage
exec(line)
File "<string>", line 1, in <module>
File "D:\python385\lib\site-packages\dpi.py", line 2
os.add_dll_directory(r'd:\dmdbms\bin')
^
IndentationError: unexpected indent
这时候需要编辑文件dpi.py(默认在python的lib\site-packages路径下,本文为D:\python385\lib\site-packages\dpi.py)
修改
import os
os.add_dll_directory(r'd:\dmdbms\bin')
为
import os
os.add_dll_directory(r'd:\dmdbms\bin')
去除相应的空格
总结
本文讲述了在windows环境下使用python进行达梦数据库开发的简单示例,并对一些可能出现的异常情况进行了阐述,希望能够有助于相关开发人员。