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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:42:22