31 ORM 添加表记录

内容目录

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自带的接口文档进行测试。

发表回复