alembic生成的文件夹应该放在哪里?

问题描述 投票:0回答:1

我正在启动一个fastapi项目,并使用sqlalchemy + alembic来管理sqlite数据库。一切正常,直到蒸馏器。

这是项目文件夹结构:

app/
  - api/
  - core/
    - __init__.py
    - settings.py
  - db/
    - __init__.py
    - database.py

(我在所有文件夹中都放了

__init__.py

首先,我尝试在

db/
内创建迁移文件夹,但没有成功(与下面的错误相同)。所以我在根文件夹
alembic init migrations
中做了
app/

现在文件夹看起来像:

app/
  - api/
  - core/
    - __init__.py
    - settings.py
  - db/
    - __init__.py
    - database.py
  - migrations/
    - versions/
    - env.py
  - alembic.ini

我修改了

env.py

from ..db.database import Base
from ..core.settings import settings

target_metadata = Base.metadata

def get_url():
    return settings.db_url

然后在

app/
,我尝试了

  • alembic revision --autogenerate -m "init"
  • python -m alembic.config revision --autogenerate -m "init"

但所有人都抱怨:

...
  from ..db.database import Base
ImportError: attempted relative import with no known parent package

而且由于

prepend_sys_path = .
中有
alembic.ini
,因此像
from db.database import Base
这样的导入就可以了。但是,我在
db/database.py
core/settings.py
以及所有其他文件中也使用了相对导入,并且不想修改代码。

我的问题是:

  • 也许我可以将迁移文件夹放在
    app/
    之外,并将相对导入更改为
    app.db.database
  • 这可能适用于单个顶级应用程序,但是如果我有多个子应用程序(
    app/subapps/sub1
    app/subapps/sub2
    ),并且想要为每个子应用程序管理单独的 sqlite 文件怎么办?
  • 或者也许
    alembic
    对于我的用例来说不是正确的选择?
python fastapi alembic
1个回答
0
投票

始终使用绝对导入而不是相对导入

© www.soinside.com 2019 - 2024. All rights reserved.