点击上方蓝色字体关注我们

近日,考虑建立一个Python编程环境对接达梦数据库进行开发。因当前检索到的达梦数据的Python驱动dmPython安装过程的技术文大多是基于安装了达梦数据库或者达梦数据库客户端,而达梦数据库安装包比较大,安装后再安装dmpython的过程过于繁琐。遂计划尝试在原生centos容器中直接部署好dmPython,这样启动容器即可在容器中运行Python代码对接达梦数据库。本文内容主要讲述的是DM8数据库Python接口的安装和容器环境的生成。


环境说明

本地PC上直接建立虚拟机进行操作。
CPU:建议虚拟机分配CPU为2个以上;
内存:建议虚拟机分配内存为4G及以上;
磁盘:40G以上连续硬盘空间;
操作系统:虚拟机操作系统为Centos7.9.2009;
数据库:达梦数据库管理系统DM8。


步骤说明

基本环境准备
虚拟机中需要安装好docker及达梦数据库客户端。达梦数据库客户端中有制作容器需要的dmpython的安装包和动态链接库。
在docker中下载使用原生 CentOS 7.9.2009 作为基础镜像。
docker pull centos:7.9.2009
安装达梦数据库,只需要驱动即可,放在默认目录中(/home/dmdba/dmdbms)。
创建一个centos_dmpy目录后续操作均在这个目录中进行。
dmPython所需的文件放在dmsoft目录中。
/home/dmdba/dmdbms/drivers/python 拷贝到 centos_dmpy/dmsoft/drivers/python;
/home/dmdba/dmdbms/drivers/dpi 拷贝到 centos_dmpy/dmsoft/bin;
/centos_dmpy/dmsoft/bin/include 移动到 centos_dmpy/dmsoft/;
在dmsoft里还加入“dmpython_con.py”文件,是一段测试python连接达梦数据库的测试代码。
# -*- coding: utf-8 -*-import dmPythonconn = dmPython.connect(user='SYSDBA', password='SYSDBA', server='127.0.0.1', port=5236)try:cursor = conn.cursor()cursor.execute('SELECT username FROM dba_users')values = cursor.fetchall()for value in values:print(value)print("hello world conn ok")finally:if cursor:cursor.close()if conn:conn.close()
容器中测试dmpython安装
以centos7.9.2009为基础启动容器命名为dmpy。
docker run -dit --name dmpy centos:7.9.2009
将dmsoft文件夹整体拷贝到容器中去。
docker cp ./dmsoft/ dmpy:/
进入容器中查看dmsoft是否拷入
docker exec -it dmpy /bin/bash
在容器里加入环境变量。
export DM_HOME=/dmsoftexport LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATHexport PATH=$PATH:$HOME/bin:$DM_HOME/bin

Centos7.9.2009里已经自带了Python版本为2.7,进入到目录:
/dmsoft/drivers/python/dmpython中直接安装dmpython。
python setup.py install

到此达梦数据库的python驱动就装好了,使用验证一下 dmpython_con.py是否能连接上。
将dmpython_con.py中的要连接的数据库信息填好(ip、端口、用户名、密码)。
尝试运行。

退出可以用docker commit来将我们对基础镜像修改保存重新打包为centos_dmpy:1.0。
docker commit -m 'centos7.9.2009+dmpython' -a 'zhuyue' dmpy centos_dmpy:1.0
建立dockerfile打包生成镜像
在实际中一般不用docker commit来重新打包而是使用dockerfile。
在centos_dmpy目录下建立dockerfile。
vi dockerfile
dockerfile中按照上面过程进行编写保存。
# 使用 CentOS 7.9.2009 作为基础镜像FROM centos:7.9.2009# 设置 DMSoft 的主目录环境变量ENV DM_HOME=/dmsoft# 将 DMSoft 的 bin 目录加入到 LD_LIBRARY_PATH 环境变量中ENV LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH# 将 DMSoft 的 bin 目录加入到 PATH 环境变量中ENV PATH=$PATH:$HOME/bin:$DM_HOME/bin# 将本地 dmsoft 文件夹的内容复制到容器的根目录下RUN mkdir -p dmsoftCOPY dmsoft/ /dmsoft# 安装 DMSoft 的 Python 驱动RUN cd /dmsoft/drivers/python/dmPython && \python setup.py install# 设置容器启动时执行的命令CMD ["/bin/bash"]
用这个dockerfile建立镜像
docker image build -t centos_dmpy:2.0 .
然后直接用镜像创建容器dmpy(原来的dmpy容器需要删除)。然后进入容器中运行连接测试程序测试。

建立带有python3的镜像
Centos7.9自带的Python 2.7的官方支持已经在2020年1月1日正式终止。现在主流是使用Python 3,下面直接使用dockerfile制作带有python3和带有对应版本dmpython的镜像。
# 使用 CentOS 7.9.2009 作为基础镜像FROM centos:7.9.2009# 设置 DMSoft 的主目录环境变量ENV DM_HOME=/dmsoft# 将 DMSoft 的 bin 目录加入到 LD_LIBRARY_PATH 环境变量中ENV LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH# 将 DMSoft 的 bin 目录加入到 PATH 环境变量中ENV PATH=$PATH:$HOME/bin:$DM_HOME/binRUN mkdir -p dmsoft# 将本地 dmsoft 文件夹的内容复制到容器的根目录下COPY dmsoft/ /dmsoft# 安装 python3、gcc、还有 DM 的 Python 驱动RUN yum install python3 python3-devel gcc -y && \cd /dmsoft/drivers/python/dmPython && \python3 setup.py install && \sed -i '1 s|^.*$|#!/usr/bin/python2|' /usr/bin/yum && \ln -sf /usr/bin/python3 /usr/bin/python# 设置容器启动时执行的命令CMD ["/bin/bash"]
制作镜像centos_dmpy3:2.0。
docker image build -t centos_dmpy3:2.0 .

后面启动容器,测试数据库连接的过程和上面python2.7相同。


总结

本文内容主要讲述的是DM8数据库Python接口的安装和容器环境的生成。
借助docker可以快速生成一个可以连接DM数据库的python环境。由于容器的特性不需要考虑兼容性的问题。容器中Python代码是否适配得当有待观察和更多的代码测试。后续 Python 的包管理工具等常用的Python功能模块需要继续即成完善。
以上为本期分享,希望能带给大家帮助。想要了解更多往期干货,可访问页面最下方#达梦技术干货攻略#合集或下方相关分享。在此邀请更多学员参与“达梦技术干货投稿活动”,稿件获选后将在达梦“干货分享”专栏进行发布,欢迎来稿!


一周热文


开班通知 | 第21期DM8-DCA线上培训班招生中(2024年07月24日开班)

开班通知 | 第23期DM8-DCP线上培训班招生中(2024年08月12日开班)
达梦E学
微信号:DM-Elearning
扫码关注查看更多内容
点击下方在看,分享本文












