在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出现问题,但是在使用最新版本的{{1}进行构建时,我仍然会遇到问题}。
答案 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