【问题标题】:'sqlite3.Cursor' object has no attribute '__getitem__' Error in Python Flask'sqlite3.Cursor' 对象没有属性'__getitem__' Python Flask 中的错误
【发布时间】:2016-10-23 21:24:21
【问题描述】:

这是我的代码。每次按登录时都会出现此错误:

'sqlite3.Cursor' 对象没有属性 '__getitem__'

这是我的登录标签:

@app.route('/', methods=['GET', 'POST'])
def login():
    error= None
    if request.method == "POST":
        with sql.connect("database.db") as con:
            cur = con.cursor()
            try:
                data = cur.execute("SELECT name FROM users WHERE name= ?",(request.form['username'],) )
                data.fetchone()

                if sha256_crypt.verify(request.form['password'], data[0]):
                    session['logged_in'] == True
                    session['username'] = request.form('username')
                    flash('Successfully logged in')
                    return redirect(url_for(hello_world))
                else:
                    error = "Invalid Password or User. Try again."

            except Exception as e:
                flash(e)
                return render_template('login.html',error=error)
        con.close()
        gc.collect()
    return render_template('login.html', error=error)

我做错了什么?

【问题讨论】:

标签: python sqlite flask


【解决方案1】:

__getitem__ 指方括号访问,在本例中为data[0]。该错误告诉您不能使用这样的游标。将data[0] 替换为data.fetchone() 返回的值。

【讨论】:

  • x = data.fetchone() if sha256_crypt.verify(request.form['password'], x):
  • 喜欢吗?我现在收到另一个错误,它说:哈希必须是 unicode 或字节,而不是 sqlite3.Cursor
  • 您的代码看似正确,但您的错误令人惊讶。如果你print(x) 怎么办?它应该是一个元组或None
  • 我认为我的错误在我的 sql 语句中... data = cur.execute("SELECT name FROM users WHERE name= '?'" (request.form['username'],) )
  • 您肯定需要SELECT 密码哈希,而不是name,但这并不能解释您的错误消息。
猜你喜欢
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2014-05-21
  • 2019-09-14
  • 2015-11-29
相关资源
最近更新 更多