Python pyodbc 错误与查询,适用于 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 Server,但在使用pyodbc时表别名似乎有问题?

这是我能够发现的

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

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

UPDATE + FIX

此问题是由串联错误引起的:

在用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...
"

。没有出现串联错误的机会。

相关内容

  • 没有找到相关文章

最新更新