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 别名似乎有问题?
这是我能找到的:
- SQL 服务器 运行 宁在 Microsoft Windows NT 6.1 (7601)
- SQL服务器版本为11.0.5532.0
- pyodbc 库:pyodbc-3.0.7.win32-py2.7
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...
"
...不会出现串联错误。
在 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 别名似乎有问题?
这是我能找到的:
- SQL 服务器 运行 宁在 Microsoft Windows NT 6.1 (7601)
- SQL服务器版本为11.0.5532.0
- pyodbc 库:pyodbc-3.0.7.win32-py2.7
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...
"
...不会出现串联错误。