Это немного зависит от того, является ли User.username
уникальным. Если вы ожидаете, что запрос вернет только одну строку (или не будет строки), то вы можете использовать Query.scalar()
.
Возвращает первый элемент первого результата или None, если нет строк
подарок. Если возвращается несколько строк, возникает MultipleResultsFound.
Это будет выглядеть так:
password = session.query(User.password).filter(User.username == 'asdef').scalar()
print(password) # 1234
... т.е. не в цикле for
.
Однако, если запрос session.query(User.password).filter(User.username == 'asdef')
может вернуть более одной строки (т. Е. Более одного пользователя с одним и тем же именем пользователя, и, возможно, это то, что вы намереваетесь здесь, поскольку вы обращаетесь к запросу в цикле for), чем .scalar()
потерпит неудачу, поскольку внутренне он использует Query.one()
, который вызывает исключение MultipleResultsFound
, если запрос возвращает более одной строки. В этом случае вам просто нужно проиндексировать пароль или получить его с помощью поиска по атрибутам (прокси-строка строки может сделать это):
for row in session.query(User.password).filter(User.username == 'asdef'):
# both of these will print the same thing, but the second one
# makes for nicer reading!
print(row[0])
print(row.password)
# output:
# 1234
# 1234