SQLAlchemy create_all без фляги

У меня есть модель, используемая моим флеш-сервером, а также инструмент командной строки. Я хочу, чтобы и приложение-скрипт, и приложение-колба могли создавать таблицы программно, используя эту модель.

В приложении фляга я делаю это:

from models import db
db.app = app
db.init_app(app)
db.create_all()

Однако я не могу использовать этот код в инструменте командной строки, так как нет приложения, и без приложения я получаю

RuntimeError: приложение не зарегистрировано в экземпляре БД и приложение не привязано к текущему контексту

Что имеет смысл. Так как мне заставить его работать с инструментом командной строки, не создавая другую версию моего файла модели?

Файл моей модели (примерно):

class User(db.Model):
__tablename__ = "users"

id = Column(Integer, primary_key=True)
account_id = Column(BigInteger, nullable=False)
team_name = Column(String, nullable=False)
external_id = Column(String(36), nullable=False)
# should not be filled with web app, but for misc notes we take later
notes = Column(String)


def __str__(self):
    return "User (account_id={}, team_name='{}', external_id='{}')".format(
            self.account_id, self.team_name, self.external_id)


__table_args__ = (
    UniqueConstraint("account_id", name="unique_account_id"),
    UniqueConstraint("external_id", name="unique_external_id"),
    UniqueConstraint("team_name", name="unique_team_name")
)

0 ответов

Другие вопросы по тегам