tortoise / aerich

A database migrations tool for TortoiseORM, ready to production.
https://github.com/tortoise/aerich
Apache License 2.0
820 stars 94 forks source link

有多个App的情况下只有第一个app能成功迁移。 #153

Closed OpenHill closed 3 years ago

OpenHill commented 3 years ago

这是我的 TORTOISE_ORM 配置 ,可以成功创建数据库 但是不能执行迁移 ,运行迁移命令会出现 no changes detected

成功创建数据库后会生成的迁移文件始终都只有第一个aerich app的文件夹,所有的Sql 都在里面,包括其他app的,唯独有迁移失败,麻烦您看一下怎么回事。

setting ↓

TORTOISE_ORM = {
"connections": {"default": "mysql://admin:admin@localhost:3306/test"},
"apps": {
'aerich': {
'models': ['aerich.models'],
'default_connection': 'default'
},
'device_manager': {
'models': ['apps.device_manager.models'],
'default_connection': 'default'
},
'auth': {
'models': ['common.auth.models'],
'default_connection': 'default'
},
'accessory': {
'models': ['common.accessory.models'],
'default_connection': 'default'
}
}
}

sanic web


# 文件目录

project_directory apps device_manager models.py init.py # TORTOISE_ORM in

common
    accessory
        models.py
    auth
        models.py

run,py


**device_manager** app, **auth** app 和 **accessory** app 被修改时会出现 'no changes detected'
long2ice commented 3 years ago

多个app需要指定 --app参数

OpenHill commented 3 years ago

感谢,目前已经能够迁移了。但是我还有疑问,为什么migrations文件夹下的Sql文件夹内容是所有表的创建语句 而不是分app单独存放。如下:

# app_one

class ModelOne(Model):
    ......
# app_two

class ModelTwo(Model):
    ......

在执行完 --app app_one init-db--app app_two init-db 之后在migrations文件夹下面生成了两个app_name文件夹里面的SQL文件都是一样的,这是正常的吗? 难道不是对应的App文件夹下面只存放对应的模型Sql吗。

目前两个app文件夹下SQL一致,且所有表第一次init-db 时就会在数据库内创建完成

create Table modeltwo ....
create Table modelone ....

想象之中


# migrations/app_one/xxxx.sql 

create Table modelone ....

migrations/app_one/xxxx.sql

create Table modeltwo ....

long2ice commented 3 years ago

估计这里有点问题,通常情况下一个项目只会有一个app,一个app对应一个数据库连接

OpenHill commented 3 years ago

感谢解答,如果能修复就更好了。