如何修复TypeError:“ NoneType”和“ int”的实例之间不支持“>”

时间:2019-10-18 21:10:14

标签: python-3.x flask mysql-connector-python

我正在使用Python / Flask / mysql.connector设置登录表单,但是在登录时遇到错误文件“ F:\ Python \ Apps \ webapp \ app.py”,第84行     如果结果> 0:TypeError:在'NoneType'和'int'的实例之间不支持'>'。

我尝试了不同的操作,例如将if语句更改为其他内容并验证字典是否为真,但是我遇到了相同的错误。

#Login
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        #Get Form
        username = request.form['username']
        password_candidate = request.form['password']

        #Get user by username
        result = cursor.execute("SELECT * FROM users WHERE username = %s", [username])

        if result > 0:
            #Get stored hash
            data = cursor.fetchone()
            password = data['password']

            #compare the Passwords
            if sha256_crypt.verify(password_candidate, password):
                #Passed
                session['logged_in'] = True
                session['username'] = username

                flash('You are now logged in', 'success')
                return redirect(url_for('dashboard'))
            else:
                error = 'Invalid Login'
                return render_template('login.html', error=error)
            #Close connection
            cursor.close()
        else:
            error = 'Username not found'
            return render_template('login.html', error=error)
    return render_template('login.html')

如果您要注册的信息有效,我希望表格可以登录;如果信息无效,则显示失败登录。显然,这些信息将从mysql数据库中提取。

2 个答案:

答案 0 :(得分:0)

result = cursor.execute("SELECT * FROM users WHERE username = %s", [username])

此行引起问题。它返回一个空值,可能是因为用户名不存在。

我看到您有一个if...else可以处理此问题,但是如果结果的值为None,则无法将其与整数值-0进行比较。

在python中,您可以通过以下操作检查值是否不是None

if result:
    # code
else:
    # code

希望这会有所帮助。祝你好运。

答案 1 :(得分:0)

我解决了这个问题。 我从import mysql.connector更改为from flask_mysqldb import MySQL

按照下面的示例删除mysql.connector配置并添加数据库详细信息

 app.config['MYSQL_HOST'] = 'localhost'
 app.config['MYSQL_USER'] = 'scott'
 app.config['MYSQL_PASSWORD'] = ''
 app.config['MYSQL_DB'] = 'users'
 app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

之后,我必须初始化应用程序

mysql = MySQL(app)

最后一部分是创建游标,如下例所示。

cursor = mysql.connection.cursor()

我还更改了if语句,以反映@Harshal Parekh的建议。

代替

    if result > 0:

我用过

    if result:

希望这对其他人有帮助。