python脚本连接达梦和mySQL等的问题闲谈

1.达梦数据库连接

1.1准备和操作

  1. 根据系统的版本,在dm官网下载dm数据库软件。一定要注意dm数据库的位数要和python的位数相同,统一为32位或者64位。并配置相关的dm数据库环境变量。
  2. 在drivers/python/下找到dmpython文件夹,直接使用命令 python setup.py install 进行安装。
  3. dmPython的使用文档可以参考官方文档<<DM8_dmPython使用手册>>,在安装目录中有。

1.2遇见的问题

  1. 当dm数据库和python位数不相同的时候,出现如下错误:
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_unbind_params
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_exec_direct
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_prepare
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_row_count
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_number_params
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_close_cursor
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_number_columns
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_get_desc_field
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_get_diag_field
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_fetch
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_more_results
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_set_stmt_attr
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_desc_column
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_desc_param
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_free_handle
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_param_data
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_get_stmt_attr
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_exec
    Cursor.obj : error LNK2001: 无法解析的外部符号 _dpi_alloc_stmt
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_logout
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_alloc_con
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_rollback
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_set_con_attr
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_get_con_attr
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_commit
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_free_stmt
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_login
    Connection.obj : error LNK2001: 无法解析的外部符号 _dpi_free_con
    Environment.obj : error LNK2001: 无法解析的外部符号 _dpi_free_env
    Environment.obj : error LNK2001: 无法解析的外部符号 _dpi_get_env_attr
    Environment.obj : error LNK2001: 无法解析的外部符号 _dpi_get_diag_rec
    Environment.obj : error LNK2001: 无法解析的外部符号 _dpi_alloc_env
    exLob.obj : error LNK2001: 无法解析的外部符号 _dpi_lob_get_length
    exLob.obj : error LNK2001: 无法解析的外部符号 _dpi_lob_truncate
    exLob.obj : error LNK2001: 无法解析的外部符号 _dpi_lob_read
    exObject.obj : error LNK2001: 无法解析的外部符号 _dpi_get_obj_attr
    ********* : error LNK2001: 无法解析的外部符号 _dpi_***************
    ********* : error LNK2001: 无法解析的外部符号 _dpi_***************
    ********* : error LNK2001: 无法解析的外部符号 _dpi_***************
    ********* : error LNK2001: 无法解析的外部符号 _dpi_***************
    。。。。
    解决办法: 更换软件安装包,使二者统一为32位或者64位即可。
  2. import dmPython模块发生dll找不到的错误?
    解决方案: 有可能是配置的{dm数据库安装目录}/drivers/dpi未生效。在dmPython的安装目录下({python的安装目录}/Lib/site-packages), 将dm数据库的drivers/dpi下的所有dll放到dmPython安装目录下即可。
  3. import dmPython模块发生"加密模块版本不匹配"错误?
    解决方案: 分析:属于odbc加载到了对应的第三方动态库文件,但是加载的是错误的动态库文件。dodbc.dll是需要依赖第三方动态库文件的,例如比较重要的两个libeay32.dll ssleay32.dll都属于openSSL相关的动态链接库,而windows操作系统c:\windows\sysWOW64下大多自带这些动态库,但是有些较老的windows版本,例如windows server2008自带的并不是达梦dodbc.dll所需要依赖的(即使文件名称相同),所以我们只需要让系统加载到正确的动态库文件即可。分析到这里我们可能会想到直接将达梦bin目录添加WINDOWS的系统环境变量PATH优先级最高位置是不是就可以了。笔者实际操作发现是不行的,怀疑可能windows操作系统启动后自动加载了根盘下的动态库,而设置的系统环境变量path还是处于较低优先级。优先级这个问题有待进一步确定。

解决方法:达梦dodbc.dll加密需要的第三方动态库与机器上已有的动态库发生冲突,解决办法将达梦bin下的*.dll替换拷贝到c:\WINDOWS\SysWOW64下即可(替换中发现了共替换了5个文件libeay32.dll, msvcp100.dll, msvcp100d.dll, msvcr100.dll, msvcr100d.dll,其中libeay32.dll是最重要的一个)

2. MySQL数据库连接

2.1 准备

  1. 选择PyMySQL,什么是PyMySQL?
    PyMySQL是从Python连接到MySQL数据库服务器的接口。 它实现了Python数据库API v2.0,并包含一个纯Python的MySQL客户端库。 PyMySQL的目标是成为MySQLdb的替代品。 简单理解就是,Pymysql是python操作mysql数据库的三方模块。
    PyMySQL可以点击进行下载。
  2. 在PyMySQL文件夹中直接使用命令python setup.py install 进行安装。
  3. pyMySQL的使用如下,仅供参考:

import pymysql
 
#创建数据库链接
db = pymysql.connect(
    host = "localhost", #主机ip
    user = "root", #数据库用户
    password = "1111", #用户对应的密码
    database = "school", #对应的数据库
    port = 3306, #数据库端口,默认3306
    charset = 'utf8' #数据库编码
)
#创建游标:游标用于传递python给mysql的命令和mysql返回的内容
cursor = db.cursor()
#执行部分
exe = cursor.execute("show databases") #执行命令,返回查询的条数
print(exe)
#result = cursor.fetchone()
#result = cursor.fetchmany(3)
result = cursor.fetchall() #查询结果
 
print(result)
#关闭部分
db.commit() #链接提交,用于对数据库的增删改
cursor.close() #关闭游标
db.close() #关闭链接

参考文献:

  1. 关于asp访问达梦ODBC问题;
  2. pymysql的安装及使用;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值