【问题标题】:python pyodbc error with query that works fine against ms sqlserverpython pyodbc错误,查询对ms sqlserver工作正常
【发布时间】:2015-04-23 11:05:32
【问题描述】:

在 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 开发人员来尝试重现并回发调查结果。

【问题讨论】:

  • 发布的 T-SQL 没有任何语法错误。请使用用于产生错误的 python 代码编辑问题。
  • 我无法重现您的问题。请edit您的问题以@BryanEargle 的建议显示您的代码,并提及所涉及的各种组件的版本(Python、pyodbc、SQL Server)。

标签: python sql-server pyodbc


【解决方案1】:

更新 + 修复

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

在 python 中执行原始 sql 之前,得到 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...
"

...不会出现连接错误。

【讨论】:

  • 为了将来参考,您可以在 Python 中使用 '''""" 执行类似的多行字符串文字。详情here.
  • @GordThompson 非常感谢!
猜你喜欢
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2023-03-27
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多