You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将sqlite3.Row对象转换为明文以验证密码哈希?

SQLite3 Row对象无法传入Werkzeug check_password_hash()函数报错

之前解决过sqlite3返回<sqlite3.Row object at 0x0000019494a725f0>而非实际数据的问题,当时用var in [r[0] for r in list]的方式提取值,但这个方法在密码哈希验证场景不适用——因为密码哈希不是固定值,必须用Werkzeug的check_password_hash()函数来验证。

现在遇到的问题是,sqlite3.Row对象直接传入check_password_hash()会报错:AttributeError: 'sqlite3.Row' object has no attribute 'split',就算把变量传递到HTML页面,显示的依然是Row对象而非实际的哈希值。

以下是我的代码(第14行存在问题):

@app.route('/login', methods=["GET", "POST"])
def login():    
    db = get_db()    
    if current_user.is_authenticated:        
        return redirect('/home')    
    else:        
        if request.method == "POST":            
            id = request.form["id"]            
            email = request.form["email"]            
            db_id = db.execute('SELECT UserID FROM Users WHERE Email = \"%s\"' % email).fetchall()            
            if int(id) in [r[0] for r in db_id]:                
                password = request.form["password"]                
                db_password = db.execute('SELECT Password FROM Users WHERE Email = \"%s\"' % email).fetchone()                
                check = check_password_hash(db_password, password)  # 问题所在行
                if check == 'True':                    
                    user = User(id, email)                    
                    login_user(user)                    
                    return render_template('Home.html', title='Home Page')                
                else:                    
                    return render_template('Exist.html', title='Login Page')            
            else:                
                return render_template('Exist.html', title='Login Page')

我试过用var in [r[0] for r in list]的方式提取值,但由于哈希值需要通过专门的验证函数处理,这个方法在这里无法直接解决问题。

内容的提问来源于stack exchange,提问作者Benjamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:12:16