Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于同一应用下不同models文件和不同应用的不同models文件如何初始化数据库? #24

Open
zhangyuxin123 opened this issue Jul 10, 2020 · 20 comments

Comments

@zhangyuxin123
Copy link

@long2ice 您好,我在使用aerich init-db时有2个疑惑,自己初步试了一下,没能成功。
疑惑1:初始化数据库时,同一个app应用下有多个models文件,例如models目录下有models1.py和models2.py,在初始化时要如何初始化?
疑惑2:初始化数据库时,不同应用如何初始化,例如app1应用下有一个app1_models.py,app2应用下有一个app2_models.py,在初始化时要如何初始化?

@long2ice
Copy link
Member

对于相同app,将所有的models加入到tortoise配置中就行。
对于不同app,指定--app即可。

@zhangyuxin123
Copy link
Author

@long2ice
对于相同app,如果我只想迁移models2.py中的相关东西,要怎么操作?
对于不同app,--app 后面跟的时models文件的路径吗?我试了一下,没有成果。

@long2ice
Copy link
Member

1不支持,2就是你定义tortoise时的app,默认是models

@zhangyuxin123
Copy link
Author

@long2ice
定义tortoise时的app?tortoise中没有定义app呀,您说的是app=FastAPI()这个app么?

@long2ice
Copy link
Member

image

@zhangyuxin123
Copy link
Author

好的,我试试

@zhangyuxin123
Copy link
Author

我试了一下,如果使用aerich --app models2 init-db 会同时把models你面的模型初始到数据库,这样是对的吗?

@zhangyuxin123
Copy link
Author

同时会有一个运行警告:RuntimeWarning: Module "aerich.models" has no models cls._init_apps(apps_config),但是好像是初始化成功了

@long2ice
Copy link
Member

long2ice commented Jul 10, 2020

init-db会创建表

@zhangyuxin123
Copy link
Author

我的理解是 --app models2 指定models2应用后就只是将models2涉及到的数据表创建到数据库中,难道我理解是不对的吗?

@long2ice
Copy link
Member

估计是因为你两个connection是同一个吧

@zhangyuxin123
Copy link
Author

呃呃。。。,一个项目中有多个应用都是使用的一个连接呀,同一个connection应该是很正常的吧?

@long2ice
Copy link
Member

那感觉没必要区分app,用models区分就行了

@zhangyuxin123
Copy link
Author

好的,理解了,但是针对您说的对于相同app,将所有的models加入到tortoise配置中就行。我试了一下,只会在数据库中创建列表中最后面的models对应的数据表,如下图:

@long2ice
Copy link
Member

这不对吧,会创建所有注册的models才对

@zhangyuxin123
Copy link
Author

zhangyuxin123 commented Jul 10, 2020

不好意思,刚才试了一下,可能是由于我两个models文件写的有问题,才导致会出现我的这个问题。我修改了一下其中的一个modles文件,不存在上面说的问题了。

@maxim-s-barabash
Copy link

maxim-s-barabash commented Jul 13, 2020

I get an error too RuntimeWarning: Module "aerich.models"

aerich heads
/usr/local/lib/python3.7/dist-packages/tortoise/__init__.py:556: RuntimeWarning: Module "aerich.models" has no models
  cls._init_apps(apps_config)
No available heads,try migrate

aerich 0.2.1
tortoise-orm 0.16.12

tortoise connection config:

{
  "apps": {
    "admin": {
        "models": ["test.admin_model", "aerich.models"]
    },
    "test": { 
        "models": ["test.model", "aerich.models"] 
    }
  },
  "connections": {
    "default": {
      "credentials": {
        "database": "test",
        "host": "db",
        "password": "*********",
        "port": 5432,
        "user": "nemo"
      },
      "engine": "tortoise.backends.asyncpg",
      "maxsize": 3,
      "minsize": 1
    }
  }
}

This is one application, but I have to split it, because there is a relationship
test.admin_model.py

class User(Model):
    roles = fields.ManyToManyField("admin.Role", related_name="users")

@long2ice
Copy link
Member

You should merge admin and test and keep one aerich.models

@maxim-s-barabash
Copy link

Can expect multiple applications in the same database in the future?

@long2ice
Copy link
Member

No,that's no need

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants