sqlalchemy exists for query

前端 未结 4 880
渐次进展
渐次进展 2020-12-24 04:52

How do I check whether data in a query exists?

For example:

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

How I can check w

相关标签:
4条回答
  • 2020-12-24 05:10

    For SQL Server, I had to do this:

    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 = '...')
    

    But it's much simpler without 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 讨论(0)
  • 2020-12-24 05:28

    The following solution is a bit simpler:

    from sqlalchemy.sql import exists
    
    print session.query(exists().where(User.email == '...')).scalar()
    
    0 讨论(0)
  • 2020-12-24 05:30

    The most acceptable and readable option for me is

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

    like

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

    which returns True or False.

    0 讨论(0)
  • 2020-12-24 05:34

    There is no way that I know of to do this using the orm query api. But you can drop to a level lower and use exists from sqlalchemy.sql.expression:

    from sqlalchemy.sql.expression import select, exists
    
    users_exists_select = select((exists(users_query.statement),)) 
    print engine.execute(users_exists_select).scalar()
    
    0 讨论(0)
提交回复
热议问题