Tortoise_orm与Aerich 迁移

1. 安装 aiomysqltortoise-orm

在终端中运行以下命令以安装所需的依赖项:

复制代码
pip install aiomysql tortoise-orm

2. 配置 Tortoise-ORM

在您的项目中,您需要配置 Tortoise-ORM 的初始化。以下是集成步骤:

创建 config/tortoise.py 文件

新建一个文件来存放 Tortoise-ORM 的配置,例如:

csharp 复制代码
    
from tortoise import Tortoise


TORTOISE_ORM = {
    "connections": {
        "default": "mysql://username:password@localhost:3306/your_database"
    },
    "apps": {
        "models": {
            "models": ["model.model", "aerich.models"],  # 添加 aerich 的模型
            "default_connection": "default",
        },
    },
}

async def init_tortoise():
    await Tortoise.init(
        config=TORTOISE_ORM
    )
    # 如果需要自动生成表结构,可以调用 generate_schemas
    await Tortoise.generate_schemas()

async def close_db():
    await Tortoise.close_connections()

创建 models 文件夹和模型文件

在项目根目录下创建 models 文件夹,并在其中定义您的数据库模型。例如:

ini 复制代码
from tortoise.models import Model
from tortoise import fields


class Admin(Model):
    id = fields.IntField(pk=True,generated=True,auto_increment=True)
    username = fields.IntField(max_length=25,description="用户名")
    password = fields.CharField(max_length=32, description="密码")
    mobile = fields.CharField(max_length=11, description="手机号")
    avatar = fields.CharField(max_length=150, description="头像",null=True)
    nickname = fields.CharField(max_length=25, description="昵称",null=True)
    ctime = fields.DatetimeField(auto_now_add=True, description="创建时间",null=True)
    utime = fields.DatetimeField(auto_now_add=True, description="更新时间",null=True)

    class Meta:
        table = "jm_admin"
        indexes = ["username","mobile"]
        unique_together = (("username", "mobile"),)
        ordering = ["-id"]

main.py 中集成 Tortoise-ORM

python 复制代码
from fastapi import FastAPI
from router.api import api
from config.mysql import init_tortoise,close_db
from contextlib import asynccontextmanager

# 定义 lifespan 上下文管理器
@asynccontextmanager
async def lifespan(app: FastAPI):
    # 启动时执行的逻辑
    await init_tortoise()
    print("MySQL database registered.")
    yield  # 应用运行中
    # 关闭时执行的逻辑
    await close_db()
    print("MySQL connection closed.")

app = FastAPI(
    debug=True,
    title="九猫科技",
    version="0.0.1",
    description="九猫科技后台管理系统",
    lifespan=lifespan
)

app.include_router(api)


if __name__ == "__main__":
     import uvicorn
     uvicorn.run(app="main:app", host="127.0.0.1", port=8000,reload=True)

3. 安装Aerich迁移工具

Aerich是用于TortoiseORM的数据库迁移工具,通过这个工具可以根据模型类来对数据库做出改变

复制代码
pip install aerich tomlkit

运行 Aerich 初始化命令

arduino 复制代码
aerich init -t config.mysql.TORTOISE_ORM

运行以下命令以初始化迁移目录:

csharp 复制代码
aerich init-db

验证 Aerich 是否正常工作

如果上述步骤成功,您可以使用以下命令创建迁移文件并应用迁移:

  • 创建迁移文件:

    aerich migrate

  • 应用迁移:

    aerich upgrade

  • 执行回退 如果想回退到执行之前可以执行回退操作

    aerich downgrade

更新模型

  • 进行追踪并生产迁移文件
bash 复制代码
# 直接进行追踪 
aerich migrate 
# 进行追踪并指定生成的迁移文件的部分命名
aerich migrate --name drop_column
  • 执行改变

上面的migrate只是追踪模型类有什么变化,然后生成一个迁移文件,但这时候具体的改变还没有应用到数据库

注意: 执行下面的命令必须已经完成初始化配置信息和初始化数据库

执行命令来将变化应用到数据库当中:

复制代码
aerich upgrade

数据库表映射成模型类

有时数据库表是已经创建好了的,需要将其转为模型类,再通过ORM去操作数据库。aerich也有相对应的命令来帮助我们将数据库表映射成模型类

注意: 执行下面的命令必须已经完成初始化配置信息和初始化数据库

执行命令以映射:

bash 复制代码
# 映射所有的表并输出到控制台
aerich --app models inspectdb
# 指定一个表进行映射
aerich inspectdb -t user
# 映射所有表并将内容输出到文件当中(通常不会将映射内容直接输出到控制台)
aerich --app models inspectdb > models.py
相关推荐
IT_10244 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
ai小鬼头5 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
Touper.5 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
一只叫煤球的猫6 小时前
普通程序员,从开发到管理岗,为什么我越升职越痛苦?
前端·后端·全栈
一只鹿鹿鹿6 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
专注VB编程开发20年6 小时前
开机自动后台运行,在Windows服务中托管ASP.NET Core
windows·后端·asp.net
程序员岳焱6 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
一只叫煤球的猫7 小时前
手撕@Transactional!别再问事务为什么失效了!Spring-tx源码全面解析!
后端·spring·面试
旷世奇才李先生7 小时前
Ruby 安装使用教程
开发语言·后端·ruby
沃夫上校10 小时前
Feign调Post接口异常:Incomplete output stream
java·后端·微服务