sqlalchemy存在用于查询

时间:2011-10-04 10:00:53

标签: python sqlalchemy exists

如何检查查询中的数据是否存在?

例如:

users_query = User.query.filter_by(email='x@x.com')

如何检查具有该电子邮件的用户是否存在?

我可以用

查看
users_query.count()

但如何使用检查

4 个答案:

答案 0 :(得分:66)

以下解决方案更简单:

from sqlalchemy.sql import exists

print session.query(exists().where(User.email == '...')).scalar()

答案 1 :(得分:19)

对我来说,最可接受和最易读的选择是

session.query(<Exists instance>).scalar()

session.query(User.query.filter(User.id == 1).exists()).scalar()

返回TrueFalse

答案 2 :(得分:13)

我无法使用orm查询api执行此操作。但是你可以降低到较低的水平并使用sqlalchemy.sql.expression中的exists

from sqlalchemy.sql.expression import select, exists

users_exists_select = select((exists(users_query.statement),)) 
print engine.execute(users_exists_select).scalar()

答案 3 :(得分:0)

对于 SQL Server ,我必须这样做:

from sqlalchemy.sql.expression import literal

result = session.query(literal(True)).filter(
    session.query(User)
    .filter_by(email='...')
    .exists()
).scalar()
print(result is not None)

# Resulting query:
# SELECT 1
# WHERE EXISTS (SELECT 1 
# FROM User
# WHERE User.email = '...')

但是没有EXISTS,它简单得多

result = (
    session.query(literal(True))
    .filter(User.email == '...')
    .first()
)
print(result is not None)

# Resulting query:
# SELECT TOP 1 1
# FROM User
# WHERE User.email = '...'