【问题标题】:How to fix TypeError: '>' not supported between instances of 'NoneType' and 'int'如何修复 TypeError:“NoneType”和“int”实例之间不支持“>”
【发布时间】:2019-10-18 21:10:14
【问题描述】:

我正在使用 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数据库中提取出来。

【问题讨论】:

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


    【解决方案1】:
    result = cursor.execute("SELECT * FROM users WHERE username = %s", [username])
    

    这条线导致了问题。它返回一个空值可能是因为用户名不存在。

    我看到你有一个if...else 来处理这个问题,但是如果结果的值是None,你不能将它与一个整数值比较——在这种情况下是0

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

    if result:
        # code
    else:
        # code
    

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

    【讨论】:

    • 我试过了,得到了一个不同的错误,AttributeError: 'NoneType' object has no attribute 'convert_to_mysql'
    【解决方案2】:

    我解决了这个问题。 我从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:
    

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 2019-08-14
      • 2017-09-28
      • 2021-10-22
      • 2022-01-20
      • 1970-01-01
      • 2018-01-10
      • 2020-05-05
      • 2021-03-18
      相关资源
      最近更新 更多