分类目录归档:前置

包含numpy、pandas、matplotlib模块等的基本使用,自己不熟悉但很重要的数学知识等等

32 ORM之多对多添加记录

多对多关系,会有一张新的表进行存储,这里我们接上回,添加学生的时候,需要把学生选的课程一并添加到数据库中。

@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)

    # 添加多对多记录
    courses = await Courses.filter(id__in=student_in.courses)
    print("courses", courses)
    await student.courses.add(*courses)
    print("student", student.courses)

    return student

courses = await Courses.filter(id__in=student_in.courses)
这句就是在课程表中过滤学生选的课程id

await student.courses.add(*courses)
这句就是将学生选的课,一行一行插入到多对多关系表中

比如,我添加一个学生kuxie,除了基本信息外,他还选了id是6和7的课程(在courses表中可以查看)。
在文档中测试:
file
点击execute后,查看各表:
student表:
file
courses表:
file
多对多关系表:
file
学生和选的课程关系存储成功。

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

【数学基础】python在数学中的简单应用之线性代数基础

  线性代数是代数学的一个分支,主要处理线性关系问题(简称先线性问题)。线性代数中的概念是机器学习必备的基础知识,有助于理解不同机器学习算法背后的原理、算法内部是如何运行的,以便在开发机器学习系统时更好地做决策。在机器学习的背景下,线性代数也是一个数学工具,提供了像向量和矩阵这样的数据结构用于组织大量的数据,同时也提供了如加、减、乘、求逆等有助于操作数据的运算,从而将复杂的问题简单化,提升大规模运算的效率。

继续阅读

【前置知识】04.pandas模块的基本使用

Pandas是基于Numpy的一套数据分析工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 它是使Python 成为强大而高效的数据分析环境的重要因素之一

继续阅读