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

python pyodbc error with query that works fine against ms sqlserver

在 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 服务器工作,但在使用 pyodbc 时 table 别名似乎有问题?

这是我能找到的:

1) 我不知道如何生成可重现的示例,而且我不是 DBA;我可以在 SQL 中度过难关。 2) 我无法在此数据库上创建 tables。但是:我可以使用 3 个连接/3 个别名进行完整查询,使用 RODBC r 包和针对同一个数据库的 sqlQuery() 调用工作正常。因此,罪魁祸首是 pyodbc,所以我将尝试找到一个 python 开发人员来尝试重现并 post 支持调查结果。

更新 + 修复

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

得到 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.

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

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

...不会出现串联错误。