sqlalchemy 存在查询

问题描述 投票:0回答:7

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

例如:

users_query = User.query.filter_by(email='[email protected]')

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

我可以用

检查这个
users_query.count()

但是如何用exists检查它?

python sqlalchemy exists
7个回答
96
投票

下面的解决方案稍微简单一点:

from sqlalchemy.sql import exists

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

41
投票

对我来说最能接受和可读的选项是

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

喜欢

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

返回

True
False
.


17
投票

据我所知,无法使用 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()

12
投票

2021 SqlAlchemy 1.4 的答案

不要调用

.query
而是使用
select
直接与
.exists
链接,如下所示:

from sqlalchemy import select

stmt = select(User).where(User.email=="[email protected]").exists()

来源:https://docs.sqlalchemy.org/en/14/core/selectable.html?highlight=exists#sqlalchemy.sql.expression.exists


4
投票

对于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 = '...'
    

0
投票

SQLAlchemy 1.4/2.0 中最简单的方法,使用新的统一 API

from sqlalchemy import exists session.scalar( exists() .where(User.email == '[email protected]') .select() )
    

-2
投票
可以做到:

from sqlalchemy import select user = session.scalars( select(User).where(User.email=="[email protected]") ).first() if user: pass else: pass
    
© www.soinside.com 2019 - 2024. All rights reserved.