pymssql 不返回结果数据
Posted
技术标签:
【中文标题】pymssql 不返回结果数据【英文标题】:pymssql not returning result data 【发布时间】:2013-09-12 09:20:29 【问题描述】:我在 Linux 上运行 pymssql
包(版本 1.0.2)时遇到问题。看起来我可以成功连接并向服务器发出 SQL 语句,但查询返回空白结果。我已经确认CREATE TABLE
和INSERT
语句可以正常工作,但即使我创建一个新表并将数据插入其中,针对该表的查询也会返回空白/空结果。这是我正在使用的代码:
>>> 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 的回答解决了我的问题 :) 【参考方案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
【讨论】:
以上是关于pymssql 不返回结果数据的主要内容,如果未能解决你的问题,请参考以下文章
通过 pymssql 将 int 变量与 MSSQL 查询结果 Python 进行比较
Python pymssql 尝试启动新的 Adaptive Server 操作,但结果未决