如何在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
相关产品推荐
相关产品推荐

