如何用Flask创建健身记录数据库?SQLite3与XAMPP+PHP选哪个?
解决方案:健身计划Web应用的数据库设计与技术选型
一、用SQLite3创建Workout相关表
你已经用Flask搭好基础,直接用sqlite3原生就能搞定表结构设计。健身计划的核心表需要关联用户(可选)、健身计划、动作、计划-动作关联,以下是具体的建表逻辑和Flask中执行的代码:
1. 核心表结构设计
需要4张表(如果不需要区分用户,可以去掉Users表):
users:存储用户基本信息(支持多用户时用)exercises:存储你硬编码的动作(可把现有硬编码数据迁移到这里)workouts:存储用户创建的健身计划(比如计划名称、创建时间、备注)workout_exercises:关联健身计划和动作,记录每个动作的组数、次数等细节
2. Flask中执行建表的代码示例
在你的Flask项目里,写一个初始化数据库的函数,启动时执行:
import sqlite3 from flask import Flask app = Flask(__name__) def init_db(): # 连接数据库(不存在则自动创建) conn = sqlite3.connect('fitness.db') cursor = conn.cursor() # 创建users表(可选) cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL ) ''') # 创建exercises表(替换硬编码动作) cursor.execute(''' CREATE TABLE IF NOT EXISTS exercises ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, body_part TEXT NOT NULL, description TEXT ) ''') # 创建workouts表 cursor.execute(''' CREATE TABLE IF NOT EXISTS workouts ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, notes TEXT, FOREIGN KEY (user_id) REFERENCES users(id) ) ''') # 创建workout_exercises关联表 cursor.execute(''' CREATE TABLE IF NOT EXISTS workout_exercises ( id INTEGER PRIMARY KEY AUTOINCREMENT, workout_id INTEGER NOT NULL, exercise_id INTEGER NOT NULL, sets INTEGER NOT NULL, reps INTEGER NOT NULL, rest_time INTEGER, -- 休息时间(秒) FOREIGN KEY (workout_id) REFERENCES workouts(id), FOREIGN KEY (exercise_id) REFERENCES exercises(id) ) ''') # 提交并关闭连接 conn.commit() conn.close() # 启动Flask时初始化数据库 with app.app_context(): init_db() if __name__ == '__main__': app.run(debug=True)
3. 补充说明
- 不需要多用户的话,删掉
users表和workouts里的user_id字段即可 - 可通过
cursor.executemany()把现有硬编码动作批量插入exercises表 - 查询过往记录时,通过
workouts关联workout_exercises和exercises就能拿到完整计划详情
二、SQLite3 vs XAMPP+PHP的选择建议
1. 继续用Flask+SQLite3的理由
- 你已经搭好Flask基础,无需重新学习PHP和XAMPP配置,节省时间
- SQLite3是文件型数据库,轻量易部署,适合小型个人/小团队应用,不需要额外启动数据库服务
- 后续可配合Flask的ORM(比如SQLAlchemy),扩展表结构更方便
2. 考虑XAMPP+PHP的场景
- 你有PHP开发经验,或团队要求用PHP技术栈
- 未来应用需要支持大量并发用户(SQLite3高并发下性能不如MySQL)
- 需要用到PHP生态的特定工具或框架
最终建议
优先继续用Flask+SQLite3,你已有基础,完全能支撑当前简易健身计划需求。等后续用户量提升或需要更复杂的数据库功能,再考虑迁移到MySQL(XAMPP自带MySQL,到时只需调整数据库连接,后端逻辑改动不大)。
内容的提问来源于stack exchange,提问作者Evin Maguire
相关产品推荐
相关产品推荐

