2015-04-23 83 views
-2

在SQL Server Management Studio中我可以運行此查詢:蟒蛇pyodbc錯誤與查詢,對MS SQLSERVER正常工作

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?

這是我已經能夠找出

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

1)我不知道如何產生一個可重複的例子,我不是DBA;我可以通過SQL獲取。 2)我不能在這個數據庫上創建表。但是:我可以使用RODBC r包和對同一個db的sqlQuery()調用完成3個連接/ 3個別名的完整查詢。因此,罪魁禍首是pyodbc,所以我會嘗試找到一個python開發人員來嘗試複製並回傳結果。

+0

沒有*語法錯誤的T-SQL發佈。請編輯用於產生錯誤的Python代碼的問題。 – Bryan

+1

我無法重現您的問題。請[編輯]您的問題,將您的代碼顯示爲@BryanEargle建議的內容,並提及所涉及的各種組件(Python,pyodbc,SQL Server)的版本。 –

回答

3

UPDATE + FIX

的問題由串聯的錯誤:

了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... 
" 

...與拼接錯誤沒有機會。

+0

爲了將來的參考,你可以在Python中使用'''''''''''「'''來做類似的多行字符串文字[詳情] [https://docs.python.org/3.2/tutorial/introduction.html #strings)。 –

+0

@GordThompson非常感謝! – rstruck