当前位置:首页>python>Python刷题系统实训三:数据库相关2

Python刷题系统实训三:数据库相关2

  • 2026-10-11 07:01:17
Python刷题系统实训三:数据库相关2

Python刷题系统实训三:数据库相关2

四、使用 SQLAlchemy 定义数据库模型

使用类映射数据库表,结合 Pydantic 进行数据验证。

定义基类 Basedb,继承 DeclarativeBase:

class Basedb(DeclarativeBase):

Pass

用户表模型:

class UserDB(Basedb):

__tablename__= "user"

id:Mapped[int] = mapped_column(primary_key=True, autoincrement=True)

username:Mapped[str] = mapped_column(String(30), unique=True)

password: Mapped[str] = mapped_column(String(100))

该模型类 UserDB 继承 Basedb 基类,映射到名为 user 的数据库表。__tablename__ = "user" 指明表名,表中包含 id、username、password 三个字段。

题库表模型:

class Exam(Basedb):

__tablename__= "exam_tm"

id:Mapped[int] = mapped_column(primary_key=True, autoincrement=True)

tm:Mapped[str] = mapped_column(String(255))

ana:Mapped[str] = mapped_column(String(255))

anb:Mapped[str] = mapped_column(String(255))

anc:Mapped[str] = mapped_column(String(255))

andd:Mapped[str] = mapped_column(String(255))

tan:Mapped[str] = mapped_column(String(255))

tlx: Mapped[str] = mapped_column(String(30))

成绩表模型:

class Chengji(Basedb):

__tablename__= "chengji"

id:Mapped[int] = mapped_column(primary_key=True, autoincrement=True)

userid:Mapped[int] = mapped_column(Integer)

chengji:Mapped[int] = mapped_column(Integer)

leibie: Mapped[str] = mapped_column(String(50))

五、Pydantic 数据验证

系统有登录页面,需输入 username 和 password。FastAPI 接收 POST 请求体时,需用 Pydantic 的 BaseModel 定义数据结构,确保参数类型与约束合规(与 SQLAlchemy 模型对应):

from pydantic import BaseModel

class Base(BaseModel):

pass

class User(Base):

username:str

password: str

六、查询数据示例:查询ID号为2的用户考试成绩情况。

@app.get("/me")

def get_me(request: Request, db: Session = Depends(get_db)):

question_list= db.query(Chengji).where(Chengji.userid == 2).all()

print(question_list[0].leibie,question_list[0].chengji)

return{"data": question_list}

最新文章

随机文章