Python高性能web框架-FastApi教程:(17)ORM添加表记录

(17)ORM添加表记录

1. 数据校验

我们需要先写一个数据校验模型,学生信息输入模型。该模型用于验证学生信息,包括姓名、密码、学号、班级和课程列表。

api/students.py里增加:

class StudentIn(BaseModel):
    
    name: str 
    pwd: str
    sno: int
    clas: int
    courses: List[int] = []  # 学生选修的课程列表,默认为空列表

    @field_validator('name')
    def name_must_alpha(cls, value):
        """
        验证姓名必须为字母。

        参数:
        - cls: 类本身
        - value: 需要验证的姓名值

        返回:
        - value: 验证通过的姓名值

        异常:
        - AssertionError: 如果姓名不全为字母,则抛出断言错误。
        """
        assert value.isalpha(), '姓名必须为字母'
        return value

    @field_validator('sno')
    def sno_validato(cls, value):
        assert 2000 < value < 3000, '学号必须大于2000小于3000'
        return value
2. 插入数据
  • 方式1:

    @student_api.post('/')
    async def addStudent(student_in: StudentIn):  # 注意async
        # 插入数据
        # 方式1
        stu = Student(name=student_in.name, pwd=student_in.pwd, sno=student_in.sno, clas_id=student_in.cls_id)
        await stu.save()  # 注意await
        return {'操作': '添加一个学生'}
    

测试看下:
在这里插入图片描述
在这里插入图片描述

确实验证上了。这边自行改为正确的即可。

  • 方式2(推荐):
@student_api.post('/')
async def addStudent(student_in: StudentIn):
    # 插入数据
    # 方式2
    stu = await Student.create(name=student_in.name, pwd=student_in.pwd, sno=student_in.sno, clas_id=student_in.clas)
    return {stu}  # 这边可以响应插入的数据 

在这里插入图片描述
在这里插入图片描述

我们来看下数据库有没有添加成功:

在这里插入图片描述

  • 多对多关系插入

    # 多对多关系
    
    # 创建一个新的学生记录,创建成功后返回学生实例
    stu = await Student.create(name=student_in.name, pwd=student_in.pwd, sno=student_in.sno, clas_id=student_in.clas)
    
    # 根据学生选择的课程ID列表,查询对应的课程记录
    choose_courses=await Course.filter(id__in=student_in.courses)
    # 将学生实例与选择的课程实例建立关
    await stu.courses.add(*choose_courses) # *choose_courses: 解包操作符*用于将列表解包为位置参数
    return stu
    

    在这里插入图片描述

    student表

在这里插入图片描述

student_courses表

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值