Ответ 1
Следующее решение немного проще:
from sqlalchemy.sql import exists
print session.query(exists().where(User.email == '...')).scalar()
Как проверить, существуют ли данные в запросе?
Например:
users_query = User.query.filter_by(email='[email protected]')
Как я могу проверить, существуют ли пользователи с таким адресом электронной почты?
Я могу проверить это с помощью
users_query.count()
а как это проверить с помощью существует?
Следующее решение немного проще:
from sqlalchemy.sql import exists
print session.query(exists().where(User.email == '...')).scalar()
Самый приемлемый и удобный для меня вариант -
session.query(<Exists instance>).scalar()
как
session.query(User.query.filter(User.id == 1).exists()).scalar()
который возвращает True
или False
.
Я не знаю, как это сделать, используя запрос 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()
Для 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 = '...'