fastapi tortoise-orm 使用三

fastapi是一个很优秀的框架,但是缺少一个合适的orm,官方代码里面使用的是sqlalchemy,Tortoise ORM 是受 Django 启发的易于使用的异步 ORM (对象关系映射器)。

github文档: https://tortoise.github.io/

Tortoise ORM 目前支持以下数据库:

  • PostgreSQL >= 9.4(使用asyncpg)

  • SQLite(使用aiosqlite)

  • MySQL/MariaDB(使用aiomysql或使用asyncmy)

创建模型

以选课系统为例:

models.py

from tortoise.models import Model
from tortoise import fields


class Clas(Model):
    name = fields.CharField(max_length=255, description='班级名称')


class Teacher(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=255, description='姓名')
    tno = fields.IntField(description='账号')
    pwd = fields.CharField(max_length=255, description='密码')


class Student(Model):
    id = fields.IntField(pk=True)
    sno = fields.IntField(description='学号')
    pwd = fields.CharField(max_length=255, description='密码')
    name = fields.CharField(max_length=255, description='姓名')
    # 一对多
    clas = fields.ForeignKeyField('models.Clas', related_name='students')
    # 多对多
    courses = fields.ManyToManyField('models.Course', related_name='students',description='学生选课表')


class Course(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=255, description='课程名')
    teacher = fields.ForeignKeyField('models.Teacher', related_name='courses', description='课程讲师')

aerich迁移工具

main.py

settings.py

aerich是一种ORM迁移工具,需要结合tortoise异步orm框架使用。安装aerich

  1. 初始化配置,只需要使用一次

初始化完会在当前目录生成一个文件:pyproject.toml和一个文件夹:migrations

  • pyproject.toml:保存配置文件路径,低版本可能是aerich.ini

  • migrations:存放迁移文件

  1. 初始化数据库,一般情况下只用一次

  • 此时数据库中就有相应的表格

  • 如果TORTOISE_ORM配置文件中的models改了名,则执行这条命令时需要增加--app参数,来指定你修改的名字

  1. 更新模型并进行迁移

修改model类,重新生成迁移文件,比如添加一个字段

迁移文件名的格式为 {version_num}{datetime}{name|update}.json。 注意,此时sql并没有执行,数据库中admin表中没有xxx字段

  1. 重新执行迁移,写入数据库

  1. 回到上一个版本

  1. 查看历史迁移记录

7.系统接口开发 api/student.py

Last updated