Подтвердить что ты не робот

Получение первой строки из sqlalchemy

У меня есть следующий запрос:

profiles = session.query(profile.name).filter(and_(profile.email == email, profile.password == password_hash))

Как проверить, есть ли строка и как я могу просто вернуть первый (должен быть только один, если есть совпадение)?

4b9b3361

Ответ 1

Используйте query.one(), чтобы получить один и ровно один результат. Во всех остальных случаях это вызовет исключение, которое вы можете обработать:

from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm.exc import MultipleResultsFound

try:
    user = session.query(User).one()
except MultipleResultsFound, e:
    print e
    # Deal with it
except NoResultFound, e:
    print e
    # Deal with that as well

Там также query.first(), который даст вам только первый результат, возможно, многих, не поднимая эти исключения. Но так как вы хотите иметь дело с тем, что нет результата или больше, чем вы думали, query.one() - это именно то, что вы должны использовать.

Ответ 2

Вы можете использовать функцию first() объекта Query. Это вернет первый результат или None, если результатов нет.

result = session.query(profile.name).filter(...).first()

if not result:
    print 'No result found'

В качестве альтернативы вы можете использовать one(), который даст вам единственный элемент, но вызывает исключения для запроса с нулевым или несколькими результатами.

from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
try:
    result = session.query(profile.name).filter(...).one()
    print result
except NoResultFound:
    print 'No result was found'
except MultipleResultsFound:
    print 'Multiple results were found'

Ответ 3

Используйте one_or_none(). Возвратитесь не более одного результата или создайте исключение.

Возвращает None, если запрос не выбирает строки.

Ответ 4

Предполагая, что у вас есть модель User, вы можете получить первый результат с помощью:

User.query.first()

Если таблица пуста, она вернет None.