Python TypeError:'long'对象不可订阅

时间:2014-05-06 20:19:03

标签: python mysql

我有一个需要登录用户的python代码,并且还要检查输入验证,例如检查密码是否正常或用户是否感到兴奋,但我一直收到此错误 TypeError:' long&#39 ;对象不可订阅 ??

这是我的代码:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if g.user:
        return redirect(url_for('hello'))
    error = None
    if request.method == 'POST':
        db = MySQLdb.connect(user="root", passwd="", db="cs324", host="127.0.0.1")
        c=db.cursor()
        user = c.execute('''select * from user where
            username = %s''', [request.form['username']])
        if user is None:
            error = ('Wrong username!')
        elif not check_password_hash(user['password'],
                                     request.form['password']):
            error = ('Wrong password!')
        else:
            session['user_id'] = user['user_id']
            return redirect(url_for('hello'))
    return render_template('login.html', error=error)

当检查密码和会话需要启动时,似乎错误发生在该行。我有什么线索可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

调用cursor.execute的结果是受影响的行数,而不是查询的结果。为此,如果您想要迭代多行,则需要致电cursor.fetchone()cursor.fetchall()

请注意,您的代码仍然无效,因为API不会返回字典,而是返回值元组,因此您无法执行user['password']。如果你想要一本字典,你需要使用DictCursor,如in this answer所述。否则,您只需要按编号引用列:user[0]等。如果您首先在SELECT查询中指定了所需的列,那将更清楚。