我正在启动一个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
对于我的用例来说不是正确的选择?始终使用绝对导入而不是相对导入