Flask - TypeError: «>» не поддерживается между экземплярами «BaseQuery» и «int» в Flask-SQLAlchemy - PullRequest
0 голосов
/ 28 октября 2018

Итак, я пытаюсь создать систему «входа в систему», цитаты из-за того, что безопасности больше нет.

Мой текущий код выглядит следующим образом:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        if not request.form['user'] or not request.form['password']:
            flash('Please enter all the fields', 'error')
        else:
            username = request.form['user']
            password = request.form['password']

            exists = db.session.query(User.user).filter_by(
                user=username)
            if exists > 0:
                logged_in = True
                session['username'] = username
                session['logged_in'] = True
                return index(exists=exists)
            return render_template('login.html', exists=exists)
        return render_template('login.html')
    return render_template('login.html')

Однако я получаю сообщение об ошибке:

TypeError: '>' not supported between instances of 'BaseQuery' and 'int'

Что я не понимаю, потому что exists должно возвращать целое число.

Любая помощь будет отличной, спасибо!

1 Ответ

0 голосов
/ 28 октября 2018

exists = db.session.query(User.user).filter_by(user=username) - это объект BaseQuery, когда вы печатаете, существует, он возвращает запрос SQL.Вы пытаетесь сравнить BasQuery экземпляр и int, следовательно, возникает ошибка.

>>> exists = db.session.query(User).filter_by(username='me')
>>> exists
<flask_sqlalchemy.BaseQuery object at 0x7fbbb7812b70>
>>> type(exists)
<class 'flask_sqlalchemy.BaseQuery'>
>>> type(0)
<class 'int'>
>>> print(exists)
SELECT user.username AS user_username 
FROM user 
WHERE user.username = ?

Если вы хотите проверить, больше ли exists, чем ноль, вы должны добавить .all() в конце запроса, затем используйте len(exists), поскольку он возвращает список.

>>> exists = db.session.query(User).filter_by(username='me').all()
>>> exists
[<User 1>]
>>> len(exists)
1
>>> type(len(exists))
<class 'int'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...