查询python pyodbc错误对ms sqlserver工作正常

时间:2015-04-23 11:05:33

标签: python sql-server pyodbc

在SQL Server Management Studio中,我可以运行此查询:

select a.foo, colX, colY, colZ from tblA a
join tblB b
on (a.foo = b.foo)

在python脚本中通过pyodbc运行相同的查询,我得到:

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][
SQL Server]"b" is not a recognized table hints option. If it is intended as a p
arameter to a table-valued function or to the CHANGETABLE function, ensure that
your database compatibility mode is set to 90. (321) (SQLExecDirectW)')

有人可以解释为什么这个查询直接对SQL Server起作用,但是在使用pyodbc时表别名似乎有问题吗?

这是我能够找到的

  • 在Microsoft Windows NT 6.1(7601)上运行的SQL Server
  • SQL Server版本为11.0.5532.0
  • pyodbc library:pyodbc-3.0.7.win32-py2.7

1)我不知道如何制作一个可重复的例子而且我不是DBA;我可以在SQL中获得。 2)我无法在此数据库上创建表。但是:我可以使用RODBC r包和针对同一db的sqlQuery()调用来完成3个连接/ 3个别名的完整查询。因此罪魁祸首是pyodbc所以我将尝试找到一个python dev来尝试重现并回发结果。

1 个答案:

答案 0 :(得分:3)

更新+修正

问题是由连接错误引起的:

让python开发人员帮助在python中执行之前查找和打印原始sql:

select a.foo, colX, colY, colZ from tblA a join tblB bon (a.foo = b.foo)

...和每个连接中的类似问题,由sql字符串中缺少的空格引起:

sql = "select a.foo, colX, colY, colZ from tblA a "
sql += "join tblB" #no whitespace at end of string
sql += "on (a.foo = b.foo)" #runs into next segment.

使用RODBC在r中工作,因为r中的字符串构建如下:

sql = "
...full query...
"

...没有连接错误的机会。