如何使用Flask-SQLAlchemy确保正确的元数据对象,以避免Alembic删除表

时间:2018-10-05 03:33:10

标签: python flask sqlalchemy

我有一个Flask应用程序,其中使用Flask-SQLAlchemy处理数据库对象的创建和管理,并使用Flask-Migrate完成数据库的迁移

当我尝试使用flask db migrate创建数据库迁移时,我的一些表会在产生的迁移中被删除,类似于this issue

INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected removed table 'media'
INFO  [alembic.autogenerate.compare] Detected removed table 'api'

在我的virtualenv中,我有一个FLASK_APP变量,指向包含create_app工厂和其他工厂的类。

declare -x FLASK_APP="app/app.py"

app/extensions.py中,我将db对象定义为db = SQLAlchemy(),在app/app.py中,我具有create_app工厂,配置扩展名和蓝图等。

from app.extensions import db

def configure_extensions(app):
  # Database
  db.init_app(app)

  # Flask-Migrate
  migrate.init_app(app, db)

def create_app():
    app = Flask("app")
    app.config.from_object(Config)
    configure_app(app, Config)
    register_blueprints(app)
    configure_extensions(app)

    return app

在我的模型中。我将模型类定义为db.Model,而不是我自己的基类,这是问题吗?

from app.extensions import db, passlib
from app.database import CRUDMixin

class Media(db.Model):
        __tablename__ = 'media'
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(255), nullable=False)
        # [sic]

我应该如何解决这个问题?

谢谢

0 个答案:

没有答案