Я пытаюсь создать веб-приложение с флягой, Mysql, SQLAlchemy и Alembic. Но я не могу понять, как работает импорт в python и как настроить мои target_metadata, чтобы иметь возможность использовать revision --autogenerate
Вот мое дерево каталогов:
Мой веб-сайт init выглядит следующим образом:
import os
from flask import Flask
app = Flask(__name__, static_folder=os.path.join(os.path.dirname(os.path.abspath(__file__)), '../static'))
app.config.from_pyfile('config.py', silent=True)
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
from website import views
Затем в моем env.py, когда я пытаюсь импортировать свой Base
следующим образом:
from website import Base
target_metadata = Base.metadata
и попробуйте запустить alembic revision --autogenerate ...
я получаю эту ошибку: ImportError: No module named website
.
И когда я пытаюсь импортировать Base
вот так:
from website import Base
target_metadata = Base.metadata
Я получаю эту ошибку: ValueError: Attempted relative import in non-package
.
Пожалуйста, не могли бы вы помочь мне понять, как работает импорт в python и как я могу установить свои target_metadata?