2014-12-19 63 views
2

我已經使用exists來檢查數據庫中是否存在數據。SqlAlchemy存在用法

我在後面的主題中按照@icecrime的回答。 SqlAlchemy Core and bare exists query

當上述線程中解釋使用EXISTS時,出現跟隨錯誤。

*** ProgrammingError: (ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'EXISTS'. (156) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (8180)") u'SELECT EXISTS (SELECT * \nFROM [ItemData] \nWHERE [ItemData].[name] = ?)' ('skv',) 

我正在使用Sqlalchemy,以下是我用過的代碼。

result=conn.execute(select([exists().where(ItemData.c.name == 'skv')])) 

我已使用"mssql+pyodbc//"前綴連接到服務器。當我使用sqlite處理數據庫時,它的工作完美無缺,是否對於Microsoft SQL數據庫訪問非常具體? PS:我是新來的sqlalchemy,如果錯誤的話我的術語道歉。

回答

2

要開始,我試圖運行對我自己的SQL Server數據庫的等效查詢:

SELECT EXISTS (SELECT * FROM [ItemData] WHERE [ItemData].[name] = 'skv') 
Incorrect syntax near the keyword 'EXISTS'. 

MSDN documentation shows that this use of EXISTS is not supported,所以我們去SQL Alchemy documentation,並發現:

Note that some databases such as SQL Server don’t allow an EXISTS expression to be present in the columns clause of a SELECT. To select a simple boolean value based on the exists as a WHERE, use literal()

+0

感謝您與答案澄清。你可以讓我知道如何在上面的select語句中使用literal()。在SQL文檔中,會話對象給出了示例,我無法在選擇語句中轉換/使用該對象。我已經嘗試了幾個隨機變化,但沒有工作。例如:'conn.execute(exists([select([literal(True)])。其中(ItemData.c.name =='skv')]))'給出以下錯誤'*** StatementError:不是可執行子句(原因:ArgumentError:不是可執行子句)' – user26249 2015-01-13 13:05:56