pymssql没有返回结果数据

时间:2013-09-12 09:20:29

标签: python sql-server pymssql

在linux上运行pymssql包(版本1.0.2)时遇到问题。看起来我可以成功连接并向服务器发出SQL语句,但查询返回空白结果。我已经确认CREATE TABLEINSERT语句没有问题,但即使我创建一个新表并向其中插入数据,对该表的查询也会返回空白/空结果。这是我正在使用的代码:

>>> import pymssql
>>> conn = pymssql.connect(host='#', user='#', password='#', database='#')
>>> cur = conn.cursor()
>>> cur.execute('SELECT * FROM tblFoo')
>>> print cur.fetchone()
None
>>> cur.execute('SELECT * FROM tblFoo')
>>> cur.fetchall()
[]
>>> cur.execute('SELECT GETDATE()')
>>> print cur.fetchone()
None

我也尝试使用_mssql包,并使_mssql使用全局配置通过freetds连接到数据库,但我遇到了同样的问题。

通过tds命令行工具 进行连接和查询 按预期返回结果。

我在redhat上使用Python 2.6.6,我正在通过buildout安装pymssql。我还尝试使用pip全局安装,我也尝试使用pymssql的最新开发版本。

是否还有其他人遇到此类或类似问题?有关如何调试此问题的任何建议?我仅限于在此项目中使用SQL Server,我无法使用pyodbc

更新

进一步调查显示我们正在使用freetds 0.91,这似乎会导致pymssql 1.0.2出现问题,但是在使用最新版本的{{1}进行构建时,我仍然会遇到问题}。

2 个答案:

答案 0 :(得分:3)

这是freetds 0.91和pymssql 1.0.X之间的一些不兼容问题(见bugreport here

然而,这是用最新版本的pymssql修复的(我升级到2.0.1并且这个问题消失了 - 包的确切名称:pymssql-2.1.0-py2.7-linux-x86_64.egg)。现在使用python setuptools很简单:

easy_install --upgrade pymssql

(不要忘记预先安装python-dev和freetds-dev debs)

答案 1 :(得分:0)

您可以使用此补丁:

diff --git a/mssqldbmodule.c b/mssqldbmodule.c
index 151bc2c..7081715 100644
--- a/mssqldbmodule.c
+++ b/mssqldbmodule.c
@@ -1934,12 +1934,12 @@ PyObject *get_result(_mssql_connection *conn) {

  // find a result set that has at least one column
conn->last_dbresults = SUCCEED;
-   while (conn->last_dbresults == SUCCEED &&
-           (conn->num_columns = dbnumcols(conn->dbproc)) <= 0) {
+   do {
        Py_BEGIN_ALLOW_THREADS
        conn->last_dbresults = dbresults(conn->dbproc);
        Py_END_ALLOW_THREADS
-   }
+   } while (conn->last_dbresults == SUCCEED &&
+           (conn->num_columns = dbnumcols(conn->dbproc)) <= 0);

    check_cancel_and_raise(conn->last_dbresults, conn);

http://lists.ibiblio.org/pipermail/freetds/2013q3/028493.html

https://gist.github.com/msabramo/6501240