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

Flask 2.3.x教程登录示例:SQLite数据查询返回None问题

Flask 2.3.x注册后无法登录:SQLite查询返回None的解决方法

问题根源在于注册接口执行数据库插入后未提交事务,导致数据仅存在于当前数据库连接的内存中,并未真正写入磁盘数据库。当login接口使用新连接查询时,自然无法读取到未持久化的数据。

具体修改方案

在auth/register接口的try-except-else代码块中,添加数据库提交操作:

@blueprint.route('/register', methods=('GET', 'POST'))
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        db = get_db()
        error = None

        if not username:
            error = 'Username is required'
        elif not password:
            error = 'Password is required'

        if error is None:
            try:
                db.execute(
                    'INSERT INTO user (username, password) VALUES (?, ?)',
                    (username, generate_password_hash(password)),
                )
            except db.IntegrityError:
                error = f'User {username} is already registered.'
            else:
                # 新增事务提交操作,将数据持久化到磁盘
                db.commit()
                return redirect(url_for('auth.login'))
        flash(error)
    return render_template('auth/register.html')

原因说明

SQLite默认启用事务机制,执行INSERT/UPDATE/DELETE这类写操作后,必须调用db.commit()才能将修改从内存事务同步到磁盘数据库。你之前的代码在插入后直接跳转,close_db仅关闭连接但未提交事务——SQLite会在连接关闭时自动回滚未提交的事务,导致注册数据丢失。而注册接口内查询能看到数据,是因为同一个事务内允许读取未提交的脏数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:05:26