Python

如何安装 dmPython

dmPython 安装文件在数据库安装目录下的 drivers 目录下

  • Linux 环境
cd /d07/dmdbms/drivers/python/dmPython
python setup.py install
  • Windows 环境
python setup.py bdist_wininst
  • 配置环境变量:(指定 dmPython.pyd 文件路径)
    • 变量名:PYTHONPATH
    • 值:F:\dmdbms\drivers\python\dmPython\build\lib.win-amd64-2.7
  • 添加环境变量:(指定 dmdpi.dll 文件路径,在安装目录的 bin 下)
    • 变量名:PATH
    • 值:F:\dmdbms\bin
  • 使用示例:
F:\dmdbms\binpython
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>import dmPython
>>>conn = dmPython.connect('SYSDBA/SYSDBA@192.168.56.97:5236')
>>>cur = conn.cursor()
>>>cur.execute('select id from pythontest')
<__builtin__.DmdbCursor on <dmPython.Connection to SYSDBA@192.168.56.97:5236>>
>>>print cur.fetchall()
[(1L,)]
>>>cur.close()
>>>conn.close()
>>>

error:Unable to find vcvarsall.bat

  • 进入当前使用 python 安装目录 Lib/distutils,找到文件 msvc9compiler.py,使用 UE 或者其他文本编辑器将其打开。
  • 在文件 msvc9compiler.py 中找到:vc_env = query_vcvarsall(VSERSION,plat_spec)
  • 根据使用本机安装的 VS 的版本号,对应安装目录(如:C:\Program Files\Microsoft Visual Studio 10.0),则改为:vc_env = query_vcvarsall(10,plat_spec)

参考 Python 连接达梦数据库

找不到指定的模块

>>> import dmPython
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: 找不到指定的模块

【问题原因】

因为 dmPython 找不到动态库 DPI,需要到 DPI 所在目录执行或者配置环境变量指向 DPI 所在目录。

【解决方法】

  • 右键【我的电脑】-【属性】,打开的界面中点击【高级系统设置】,添加环境变量。
  • 变量名:PATH 变量值:DPI 所在路径。

如下图所示:

用户变量

然后重新启动 python,输入 import dmPython 就可以了。

启动界面

DMPython 驱动在哪里可以找到

由于 Python 的版本太多,并且版本之间还不兼容。这里提供源码,客户您可以自己编译。

  • 可以加入达梦官方技术 QQ 群:1139926252,在群文件里下载 DM Python 源码驱动。
  • 可以进入 Python 数据库接口下载。

DMPython 的安装教程

请参考 Python 数据库接口

DMPython 连接 DM,报错 ImportError: No module named dmPython

若用户已经找到对应的 dmPython 驱动,可以添加环境变量:(指定 dmPython.pyd 文件路径),变量名:PYTHONPATH 值:F:\dmdbms\drivers\python\dmPython\build\lib.win-amd64-2.7 若用户没有对应驱动,可以进入 Python 数据库接口下载。

DMPython 安装报错:不是有效的 Win32 应用程序

importError: DLL load failed: %1 不是有效的 Win32 应用程序,达梦数据库安装的是 32 位的,需要安装 64 位的。

DMPython 安装报错:依赖 VC++14.0

C++ 相关组件不完善导致的报错,安装相应依赖即可。

cannot locate an Dameng software

【问题描述】

Python 连接达梦数据库,根据安装提示,切换到 root 用户,报错:

raise DistutilsSetupError("cannot locate an Dameng software " /
distutils.errors.DistutilsSetupError: cannot locate an Dameng software installation

【解决方法】

因为安装依赖 DM 的环境,在 root 用户下配置 DM 的环境变量。


'# User specific environment and startup programs'
PATH=$PATH:$HOME/bin
export PATH
export PATH="/dm/dmdbms/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm/dmdbms/bin"
export DM_HOME="/dm/dmdbms"

报错:ImportError: DLL load failed

检查环境变量配置,加上 dmdbms\bin、dmdbms、dmdbms\drives\dpi 的环境变量。确认生效后,然后进入 dmPython 目录下执行 python setup.py install,然后再导入驱动。

环境变量

导入驱动成功:

导入成功

python 数据 insert 进 DM,报错:codec can't encode character

【问题描述】

python 达梦数据库插入提示'gbk' codec can't encode character '\ue622' in position 0: illegal multibyte sequence。插入特殊字符报错。

【解决方法】

设置连接参数 local_code 。

ImportError: libdmdpi.so: cannot open shared object file: No such file or directory

【问题描述】

导入 dmpython 驱动时,报错 ImportError: libdmdpi.so: cannot open shared object file: No such file or directory

【解决方法】

加上 bin 目录的环境变量。

匹配没有可登陆的服务器

【问题描述】:

达梦数据库里有建立两个用户,这两个用户都能正常登陆数据库。在 python 里面用这两个用户去连接达梦数据库:一个用户可以,一个用户连接的时候报错:匹配没有可登陆的服务器。

【问题解答】:

这种情况,请检查用户名是否和关键字冲突了。

提示缺少 vc++ 9.0 需要下载 VCForPython27.msi

按照提示,下载安装 VCForPython27.msi 后,再安装成功。

应用为 python,同一个应用向 DM7.1 和 DM7.6 中插入数据,DM7.1 的库中数据正常,DM7.6 的库中中文出现乱码

【问题解答】:

查看应用连接串:

conn = dmPython.connect(user='###', password='###', server='10.221.144.80', port=5236, autoCommit=True)

增加 local_code 参数后改写为:

properties = { 'user' : 'SYSDBA', 'password' : 'SYSDBA', 'server' : '127.0.0.1', 'port' : 5236, 'autoCommit' : True,'local_code' : 1, }
conn = dmPython.connect(**properties)

解决乱码问题。

Python 使用连接池 PooledDB 连接达梦数据库

【问题解决】

DBUtils 是一套用于管理数据库连接池的 Python 包,为高频度高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils.PooledDB 实现了稳定、线程安全的缓存连接池。连接步骤如下:

1.安装 DBUtils 包。

pip install DBUtils==1.3

2.使用 DBUtils 的连接池 PooledDB 连接达梦数据库示例代码。

import dmPython
from DBUtils.PooledDB import PooledDB

pool = PooledDB(creator=dmPython, mincached=50,maxcached=100, server='192.168.201.118',  port=5236, user='SYSDBA', password='*******')

conn = pool.connection()
cur = conn.cursor()
SQL = "select username from dba_users"
r = cur.execute(SQL)
r = cur.fetchall()
cur.close()
conn.close()

如下图所示:

连接截图

微信扫码
分享文档
扫一扫
联系客服