我有一个需要登录用户的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)
当检查密码和会话需要启动时,似乎错误发生在该行。我有什么线索可以解决这个问题?
答案 0 :(得分:2)
调用cursor.execute
的结果是受影响的行数,而不是查询的结果。为此,如果您想要迭代多行,则需要致电cursor.fetchone()
或cursor.fetchall()
。
请注意,您的代码仍然无效,因为API不会返回字典,而是返回值元组,因此您无法执行user['password']
。如果你想要一本字典,你需要使用DictCursor,如in this answer所述。否则,您只需要按编号引用列:user[0]
等。如果您首先在SELECT查询中指定了所需的列,那将更清楚。