最近有个工作需要用python读写sqlserver数据库,就用到了pymssql库。结果在离线的生产环境部署脚本的时候,发现报错:
ImportError: DLL load failed: The specified module could not be found
查了下发现pymssql 2.1.4与2.1.2版本不再使用静态链接的方式包含freetds库,而是采用动态链接方式,需要另外下载并安装freetds。尤其是使用windows的whl离线安装包的时候。2.1.3与2.1.1版本则静态包含freetds。所以装回这两个版本即可。
参考:
http://www.pymssql.org/en/stable/freetds.html#windows
https://github.com/pymssql/pymssql/issues/399#issuecomment-185885836
另外,在使用的时候,发现一个问题。2.1.1版本的Cursor.execute(operation, params)函数的第二个参数不支持字典,只支持元组作为sql语句的参数。即:
cursor.execute("insert into <code>{{EJS9}}</code> (<code>{{EJS10}}</code>, <code>{{EJS11}}</code>) values (%s, %d)", ('funway', 30))
cursor.execute("insert into <code>{{EJS12}}</code> (<code>{{EJS13}}</code>, <code>{{EJS14}}</code>) values (%(name)s, %(age)d)", {'name':'funway', 'age': 30})