(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表