【问题标题】:pymssql not returning result datapymssql 不返回结果数据
【发布时间】:2013-09-12 09:20:29
【问题描述】:

我在 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 出现问题,但是我在使用最新版本的pymssql 构建时仍然遇到问题。

【问题讨论】:

  • 你能添加一些代码吗?如何知道你得到了空白结果?
  • @RomanPekar 我不确定这是否值得,但我会用更多信息更新问题。
  • 感谢提问,pmod 的回答解决了我的问题 :)

标签: python sql-server pymssql


【解决方案1】:

这是 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应该事先安装好)

【讨论】:

    【解决方案2】:

    你可以使用这个补丁:

    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

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多