Sqlalchemy существует для запроса - программирование

Sqlalchemy существует для запроса

Как проверить, существуют ли данные в запросе?

Например:

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

Как я могу проверить, существуют ли пользователи с таким адресом электронной почты?

Я могу проверить это с помощью

users_query.count()

а как это проверить с помощью существует?

4b9b3361

Ответ 1

Следующее решение немного проще:

from sqlalchemy.sql import exists

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

Ответ 2

Самый приемлемый и удобный для меня вариант -

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

как

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

который возвращает True или False.

Ответ 3

Я не знаю, как это сделать, используя запрос orm orm. Но вы можете опуститься до уровня ниже и использовать exists из 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()

Ответ 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 = '...'