内容目录
FastAPI tortoise ORM添加数据,在此接口方法下实现:
方式一:
@students.post('/students')
async def add_students(stu: Student):
return {"msg": "添加学生"}
传入json,并且做校验
class StudentIn(BaseModel):
# id : int # 可以不传
name: str
pwd: str
student_number: int
# 在数据库中,这个字段就变成了classes_id
classes_id: int
courses: List[int] = []
@field_validator('name')
@classmethod
def name_must_not_be_empty(cls, v):
if not v:
raise ValueError('Name cannot be empty')
return v
@students.post('/students')
async def add_students(student_in: StudentIn):
# 插入数据
# 方式一
# 先实例化
student = Student(name=student_in.name,pwd=student_in.pwd,student_number=student_in.student_number,classes_id=student_in.classes_id)
# 这里的classes_id就是一对多的传参了
# 然后存入数据库
await student.save()
return "添加了一个学生"
id我们之前设置过,是自增的:
mysql> desc student;
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | NULL | |
| pwd | varchar(32) | NO | | NULL | |
| student_number | int | NO | | NULL | |
| classes_id | int | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
方式二:
@students.post('/students')
async def add_students(student_in: StudentIn):
# 方式二
student = await Student.create(name=student_in.name,pwd=student_in.pwd,student_number=student_in.student_number,classes_id=student_in.classes_id)
return student
以上代码的测试,都可以通过FastAPI自带的接口文档进行测试。