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

如何更新动态数据表?个人选课项目场景下技术实现咨询

嘿,针对你这个个人课程管理项目的需求,我整理了一套直接落地的实现方案,完全贴合你说的不用考虑生产环境、SQL注入的前提——毕竟咱个人项目就是怎么简单怎么来!


核心逻辑梳理

先对齐下你当前的思路:

  • 用户账户信息存在Users表,用户名存全局变量
  • 复制107行的主课程表,生成以用户名为名的专属课程表
  • 支持用户标记已修课程并查看

具体实现代码(以Python+SQLite为例,轻量适合个人项目)

1. 基础表创建

先搞定用户表和主课程表的SQL语句:

-- 用户表:存储账户信息
CREATE TABLE IF NOT EXISTS Users (
    username TEXT PRIMARY KEY,  -- 用户名做主键,避免重复注册
    password TEXT NOT NULL
);

-- 主课程表:存储所有107门课程的基础信息
CREATE TABLE IF NOT EXISTS MainCourses (
    course_id INTEGER PRIMARY KEY AUTOINCREMENT,
    course_name TEXT NOT NULL,
    credit REAL NOT NULL,
    description TEXT DEFAULT ''  -- 可选字段,存课程简介
);

2. 生成用户专属课程表

这一步就是把主表的结构+数据复制到用户专属表,再加个标记已修的字段:

import sqlite3

def create_user_course_table(username):
    # 连接数据库(个人项目用SQLite文件数据库就行,不用装服务)
    conn = sqlite3.connect('course_manager.db')
    cursor = conn.cursor()
    
    # 复制主表的结构和数据到用户专属表
    cursor.execute(f"""
        CREATE TABLE IF NOT EXISTS `{username}_courses` AS
        SELECT * FROM MainCourses;
    """)
    # 新增is_completed字段:0=未修,1=已修,默认0
    cursor.execute(f"""
        ALTER TABLE `{username}_courses`
        ADD COLUMN is_completed INTEGER DEFAULT 0;
    """)
    
    conn.commit()
    conn.close()

3. 标记已修课程

给用户提供标记课程完成的功能:

def mark_course_as_completed(username, course_id):
    conn = sqlite3.connect('course_manager.db')
    cursor = conn.cursor()
    
    # 更新对应课程的已修状态
    cursor.execute(f"""
        UPDATE `{username}_courses`
        SET is_completed = 1
        WHERE course_id = ?;
    """, (course_id,))
    
    conn.commit()
    conn.close()

4. 查询已修课程

让用户能查看自己已经完成的课程:

def get_user_completed_courses(username):
    conn = sqlite3.connect('course_manager.db')
    cursor = conn.cursor()
    
    # 查询所有已修的课程,返回课程名和学分
    cursor.execute(f"""
        SELECT course_name, credit FROM `{username}_courses`
        WHERE is_completed = 1;
    """)
    completed_courses = cursor.fetchall()
    
    conn.close()
    return completed_courses

个人项目专属小优化(不用折腾复杂逻辑)

  • 给Users表加个created_at字段,记录用户注册时间,自己看数据更清晰:created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • 专属表可以加个前缀比如user_,比如user_john_courses,避免和其他系统表重名,看着也更规整
  • 如果后续主课程表要加新课程,个人项目直接写个循环同步的小函数就行,毕竟用户数少,不用考虑性能问题

划重点:因为你明确说是个人项目,不用考虑SQL注入,所以直接用字符串格式化表名完全没问题——要是生产环境这么写绝对踩坑,但咱自己用就放心造!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:47:58