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

如何在Flask框架中向sqlite3批量插入字典列表并完成数据库初始化

实现步骤

1. 修复schema.sql语法错误

你原来的建表语句最后一列多了冗余逗号,会导致建表失败,建议额外增加主键id字段方便后续数据操作,修改后内容如下:

DROP TABLE IF EXISTS books;
CREATE TABLE books (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title varchar(50) NOT NULL,
    author varchar(100) NOT NULL
);

2. 修改db.py的init_db函数,新增初始数据写入逻辑

在执行完建表脚本后,将你准备的字典列表批量插入到books表中,修改后的init_db函数:

def init_db():
    db = get_db()
    with current_app.open_resource('schema.sql') as f:
        db.executescript(f.read().decode('utf8'))
    
    # 插入初始字典数据
    init_books = [
        {'title':'ajsdhkd', 'author': 'askjdh qweqwqw'},
        {'title':'ajsdhkd', 'author': 'askjdh qweqwqw'}
    ]
    # 用参数化批量插入避免SQL注入
    db.executemany(
        'INSERT INTO books (title, author) VALUES (:title, :author)',
        init_books
    )
    db.commit() # 必须提交事务,否则数据不会持久化存储

3. 执行初始化命令

运行flask init-db命令,即可自动完成建表+初始数据写入的全流程。

4. 蓝图路由中调用数据示例

你可以直接在蓝图的路由函数中调用db.py封装好的方法操作数据,参考代码:

from flask import Blueprint, jsonify
from 你的项目名.db import query_db

# 注册蓝图
book_bp = Blueprint('books', __name__, url_prefix='/books')

@book_bp.route('/list')
def get_all_books():
    books = query_db('SELECT * FROM books')
    # 把sqlite.Row对象转为字典格式方便返回
    return jsonify([dict(book) for book in books])

注意事项

  • 每次执行flask init-db都会先删除原有books表再重建,旧数据会全部清空
  • 操作数据库时必须使用参数化查询,不要直接拼接SQL字符串,避免SQL注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:39:04