はじめに

  • alembic 自動生成する際に、指定ディレクトリ配下のクラスを全てまるっとインポートする方法

問題 疑問

  • 自動生成したい対象のModelクラスをインポートしないと生成してくれない

まとめ 結果 解決方法

  • 以下を env.py 先頭に追記して、 app/models 配下の全てのクラスをインポートする

    # Import all models in app.models
    model_path = os.path.dirname(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../app/models/'))
    for py in [f[:-3] for f in os.listdir(model_path) if f.endswith('.py') and (f != '__init__.py' and f != 'base_model.py')]:
        mod = __import__('.'.join(['app.modesl', py]))
        classes = [getattr(mod, x) for x in dir(mod) if isinstance(getattr(mod, x), type)]
        for cls in classes:
            setattr(sys.modules[__name__], cls.__name__, cls)

Refs