pymssql 连接不返回数据,只打印列名?

Posted

技术标签:

【中文标题】pymssql 连接不返回数据,只打印列名?【英文标题】:pymssql connection does not return data and only prints the colum name? 【发布时间】:2017-01-10 12:33:24 【问题描述】:

我正在尝试从服务器获取数据,所以我尝试如下

#!/usr/bin/python
import pymssql
conn = pymssql.connect(host='xxxx', user='xxx', password='xxx', database='xxx')


cursor = conn.cursor()
x2 = 'select * from result where url like\'%get content%\''
cursor.execute(x2)
data = cursor.fetchall()
field_names = [i[0] for i in cursor.description]
print field_names
print data

当我运行这个程序时,它只给出列名,data 变量为空。我不知道是什么原因。我该如何解决?

我在 Windows 中运行相同的脚本没有问题。但是当我在Ubuntu 14.04 中执行脚本时,data 变量为空。

【问题讨论】:

你能在 fetchall() 命令之后还是之前检查 cursor.rowcount。 在两种情况下(fetchall 之前和之后)都给出 -1 吗?如果是,则有问题查询或连接.. @HarshaBiyani 是的,两种情况都是结果-1。如果查询或连接有问题,意味着该列如何打印? 哦对了。。你试过简单的查询吗?喜欢 - 从结果中选择 *? @HarshaBiyani 是的。我试过。但是行没有获取。 :( 【参考方案1】:

这是 Ubuntu 上 PyMSSQL 1.0.x 的一个已知错误。见No data returned from MSSQL server。解决办法是升级到>= 2.0.1版本。

由于 PyMSSQL 1.0.x 和 FreeTDX 版本的问题 存储库,PyMSSQL 不再从 MSSQL 返回任何信息 数据库查询。这意味着您不能使用 fetchone() 或 fetchall() 或类似的方法从数据库查询中获取数据。


Thomas Ward (teward) 在 2016-06-05 写道:

这是由于 freetdx 和 PyMSSQL 1.0.x 之间不兼容造成的。

解决方法是删除 python-pymssql 包,然后运行 ​​pip install pymssqleasy_install --upgrade pymssql 或类似的,以 获取最新的pymssql版本,大于等于 2.0.1.

还在 Xenial 和 Yakkety 以及 Trusty 上确认了这个问题。

【讨论】:

【参考方案2】:

你可以在 ubuntu 14.04 上试试 pyodbc

【讨论】:

以上是关于pymssql 连接不返回数据,只打印列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 %s 的情况下安全、动态地在查询中设置列名?

从存储过程pymssql获取返回值

得到存储过程pymssql返回值

oracle中如何只查询一条复合条件的记录,即查到一条记录就返回

pymssql 在 Azure/Windows 上返回的字符集与在 Mac 上不同

如何在 PHP 中打印连接的数据库信息(例如数据库名称)?