在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时表别名似乎有问题吗?
这是我能够找到的:
1)我不知道如何制作一个可重复的例子而且我不是DBA;我可以在SQL中获得。 2)我无法在此数据库上创建表。但是:我可以使用RODBC r包和针对同一db的sqlQuery()调用来完成3个连接/ 3个别名的完整查询。因此罪魁祸首是pyodbc所以我将尝试找到一个python dev来尝试重现并回发结果。
答案 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...
"
...没有连接错误的机会。