Flask-migrate 无法识别包中的所有模块?

问题描述

我是flask-migrate 的新手(Python 也是如此...),但我会说到点子上。

我曾经将所有模型存储在一个 models.py 文件中,但后来我决定将每个模型分离到其对应的文件中。

阅读此question后。我认为这将是 Flask-Migrate(或 Alembric)了解模型包中所有模块的一种快速方式。所以我这样做了,但是一旦我尝试了 flask db migrate 命令,生成的迁移文件只是删除了几个表,但不是全部。

这是项目结构:

├── app/
│   ├── __init__.py
│   └── api/
│       ├── __init__.py
│       ├── models/
│       │   ├── __init__.py
│       │   ├── model1.py
│       │   └── model2.py
│       ├── resources/
│       └── schemas/
└── run.py

run.py

from app import create_app

app = create_app()
app.run(port=5000)

app/__init__.py

from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)

    db.init_app(app)
    migrate.init_app(app,db)

    # importing the models...
    from .api import models # this should work?
    # ... or do I have to manually write every single module?

    return app

app/api/models/__init__.py

from os.path import dirname,basename,isfile,join
import glob

# Trying to apply what I learned from the referenced question...
modules = glob.glob(join(dirname(__file__),"*.py"))
__all__ = [
    basename(f)[:-3] for f in modules if isfile(f) and not f.endswith("__init__.py")
]

app/api/models/ 中的模型文件

from app import db

class ExampleModel(db.Model):
    # Model declarations goes here...
    pass

所以...总结一下这个问题,是否有更好的方法来做到这一点,或者我应该导入 app/__init__.py 文件中的每个模块?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)