dmPython 是 DM 提供的依据 Python DB API version 2.0 中 API 使用规定而开发的数据库访问接口。
使用 Python 连接达梦数据库时需要安装 dmPython。安装完 DM 数据库软件后,在安装路径下的 drivers 目录下,可以找到 dmPython 的驱动源码,由于提供的是源码,需要自己编译安装。
安装的时候区分是否本机已经安装达梦数据库,如果本机已经安装好达梦数据库,参考第一种,如果本机没有安装,请参考第二种。
注意:需要先安装 DM 数据库
1.下载驱动包源码
wget https://download.dameng.com/eco/docs/python-126594-20201027.zip
或者
curl https://download.dameng.com/eco/docs/python-126594-20201027.zip -o python-126594-20201027.zip
2.解压驱动包
unzip python-126594-20201027.zip
3.编译驱动包
cd 驱动源码解压目录python/dmPython_C/dmPython
python setup.py install
注意:本机没有安装 DM 数据库
1.下载驱动包源码
wget https://download.dameng.com/eco/docs/python-126594-20201027.zip
或者
curl https://download.dameng.com/eco/docs/python-126594-20201027.zip -o python-126594-20201027.zip
2.解压驱动包
unzip python-126594-20201027.zip
3.安装gcc
编译安装必须要GCC,如果没有安装请先安装
yum install gcc
4.设置环境变量
设置 DM_HOME 环境变量为某个目录,假定为 /data/publish/python/dmdbms
注意:dmPython 通过调用 DM DPI 接口完成 Python 模块扩展。在其使用过程中,除 Python标准库以外,还需要 DPI 的运行环境。
vi /etc/profile
// 加入如下配置
export DM_HOME=/data/publish/python/dmdbms
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/publish/python/dmdbms/
source /etc/profile
如果不设置LD_LIBRARY_PATH,会报错:
import dmPython
File "build/bdist.linux-x86_64/egg/dmPython.py", line 7, in <module>
File "build/bdist.linux-x86_64/egg/dmPython.py", line 6, in __bootstrap__
ImportError: libdmdpi.so: cannot open shared object file: No such file or directory
5.复制文件
// 从其他安装过 DM 数据库的相同操作系统的机器上拷贝,或者下载我这可用的文件点击下载dpi文件
把dmserver/drivers/dpi下的所有文件复制到/data/publish/python/dmdbms
5.编译驱动包
cd 驱动源码解压目录python/dmPython_C/dmPython
python setup.py install
如果报错Python.h 没有那个文件或者目录
解决方法:安装 python-devel 依赖包。
yum install python-devel
//python3
yum install python3-devel
然后执行
python setup.py install
编译成功的记过如图所示:
编译结果
Installed /usr/lib64/python2.7/site-packages/dmPython-2.3-py2.7-linux-x86_64.egg
Processing dependencies for dmPython==2.3
Finished processing dependencies for dmPython==2.3
可以通过 pip list查看是否安装成功
vi testdm.py
#!/usr/bin/python
#coding:utf-8
import dmPython
try:
conn = dmPython.connect(user='SYSDBA', password='SYSDBA', server='192.168.0.122', port=5236)
cursor = conn.cursor()
print('python: conn success!')
conn.close()
except (dmPython.Error, Exception) as err:
print(err)
然后执行
python test.py
如果连接成功会输出conn success!