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

FastAPI+SQLAlchemy ORM存储带选项提示及用户答案,求Enum实现与验证方案

问题:FastAPI+SQLAlchemy实现带选项的提示与用户答案存储

需求说明

需要开发FastAPI应用,使用SQLAlchemy ORM进行数据库操作,需存储以下格式的数据:

Prompt #1: ""
Options for prompt #1: ["", "", ..., ""]

Prompt #2: ""
Options for prompt #2: ["", "", ..., ""]

...

核心要求:每个提示对应一组固定选项,用户只能从对应提示的选项中选择答案,同时需要记录用户为每个提示选择的具体选项。

当前已搭建的数据库模型

from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
import datetime

class Base():
    id = Column(Integer, primary_key=True, index=True)
    created_at = Column(DateTime(timezone=True), default=datetime.datetime.utcnow)
    updated_at = Column(DateTime(timezone=True), default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)

Base = declarative_base(cls=Base)

class User(Base):
    __tablename__ = "users"
    # 省略其他字段...

    prompt_answers = relationship("PromptAnswer", back_populates="user")

class Prompt(Base):
    __tablename__ = "prompts"

    prompt = Column(String, nullable=False)

    prompt_answers = relationship("PromptAnswer", back_populates="prompt")

class PromptAnswer(Base):
    __tablename__ = "prompts_answers"

    user_id = Column(Integer, ForeignKey("users.id"))
    prompt_id = Column(Integer, ForeignKey("prompts.id"))
    answer = Column(String, nullable=False)

    user = relationship("User", back_populates="prompt_answers")
    prompt = relationship("Prompt", back_populates="prompt_answers")

现有思路与疑问

目前我的想法是:手动把所有提示添加到数据库,每个提示对应的选项存储在本地JSON文件中,在接口控制器层读取文件并完成用户答案的合法性验证,但不确定这个方案是否最优。

另外,我了解SQLAlchemy支持Enum作为列数据类型,想知道能不能用Enum来实现这个需求?如果可以的话,具体该怎么设计模型和做验证?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:43:13