2014-12-19 40 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