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

SQLite3+Flask开发问题:属性重复显示及删除后数据残留

问题解决:Flask+SQLite3 重复显示name及删除后数据残留

一、先搞定重复显示的根源

别只靠SELECT DISTINCT临时凑活,先排查数据重复的核心原因:

  • 检查你的数据库初始化代码:如果每次启动Flask或每次请求都执行插入操作,数据必然重复。必须改成仅在表不存在或为空时初始化数据。
  • 示例正确的初始化逻辑:
def init_db():
    conn = sqlite3.connect('your_db.db')
    c = conn.cursor()
    # 仅当表不存在时创建
    c.execute('''CREATE TABLE IF NOT EXISTS your_table
                 (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)''')
    # 仅当表为空时插入初始数据
    c.execute('SELECT COUNT(*) FROM your_table')
    if c.fetchone()[0] == 0:
        c.execute("INSERT INTO your_table (name) VALUES ('name1')")
        c.execute("INSERT INTO your_table (name) VALUES ('name2')")
    conn.commit()
    conn.close()

# 启动时只执行一次初始化,别放进路由里
init_db()

二、解决删除后数据残留的问题

这通常是两个原因:事务没提交、浏览器缓存了旧页面。

  1. 确保删除操作提交事务
    Python的sqlite3模块默认不会自动提交,删除后必须调用conn.commit(),还要记得关闭连接:
@app.route('/delete/<name>')
def delete_name(name):
    conn = sqlite3.connect('your_db.db')
    c = conn.cursor()
    c.execute('DELETE FROM your_table WHERE name = ?', (name,))
    # 必须提交!
    conn.commit()
    conn.close()
    return redirect('/')
  1. 禁止浏览器缓存页面
    给Flask添加响应头,强制浏览器每次请求都拉取最新页面:
@app.after_request
def disable_cache(response):
    response.cache_control.no_store = True
    response.cache_control.must_revalidate = True
    response.headers['Pragma'] = 'no-cache'
    response.headers['Expires'] = '0'
    return response

三、确保展示唯一name的最终查询

如果业务场景允许数据重复但展示要去重,用SELECT DISTINCT或者GROUP BY都可以,效果一致:

@app.route('/')
def index():
    conn = sqlite3.connect('your_db.db')
    c = conn.cursor()
    # 方式1:DISTINCT去重
    c.execute('SELECT DISTINCT name FROM your_table')
    # 方式2:GROUP BY去重
    # c.execute('SELECT name FROM your_table GROUP BY name')
    names = [row[0] for row in c.fetchall()]
    conn.close()
    return render_template('index.html', names=names)

四、前端模板正确循环

确保index.html里的循环没有重复渲染:

<ul>
    {% for name in names %}
        <li>{{ name }}</li>
    {% endfor %}
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:15:58