Flask-Migrate:显然未检测到列添加/删除,而是重新创建表

时间:2014-03-06 04:10:34

标签: python flask alembic flask-migrate

我在带有Postgresql后端的Flask应用程序中使用Flask-Migrate。问题是,在对我的模型进行更改后,比如添加或删除列,在我尝试的任何修订或迁移中,我总是得到结果

INFO  [alembic.autogenerate.compare] Detected added table u'foo'

migrations/versions中的每个脚本都包含表格创建的代码,例如

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table('foo',
    ...
    )
    ### end Alembic commands ###

我期待像

这样的东西
INFO  [alembic.autogenerate.compare] Detected added column u'foo.name'

def upgrade():
        ### commands auto generated by Alembic - please adjust! ###
        op.add_column('foo', sa.Column('name', ...
        )
        ### end Alembic commands ###

我按照此blog中的说明操作。相关设置如下:

    ### __init__.py
    import ...
    from flask.ext.script import Manager
    from flask.ext.migrate import Migrate, MigrateCommand

    app = Flask(__name__)
    app.config.from_object('config')
    db = SQLAlchemy(app)
    db.metadata.schema = app.config['DB_SCHEMA']
    migrate = Migrate(app, db)
    manager = Manager(app)
    manager.add_command('db', MigrateCommand)
    ...
    import myapp.models

    ###  models.py
    from myapp import db

    class Foo(db.Model):
        id = db.Column(db.Integer, primary_key = True)
        name = db.Column(db.String(50), nullable=False)

我遵循了以下问题中给出的一些建议: (Alembic/Flask-migrate doesn't recognise database structure)和(No changes detected in Alembic autogeneration of migrations with Flask-SQLAlchemy)没有任何运气。

知道我做错了吗?

提前致谢。

解决

我刚刚发现了这个问题。我喜欢使用DB模式,而我正在这样做

    db.metadata.schema = app.config['DB_SCHEMA']

似乎alembic不知道架构的固有范围,因此始终重新创建表。排序:没有表foo - 在最外层的全局“架构”或范围内 - 所以我必须create该表。即使在第一次迁移正确创建表之后,也会发生这种情况。当然,执行第二次迁移并不令人惊讶地产生了

    sqlalchemy.exc.ProgrammingError: (ProgrammingError) relation "foo" already exists

我刚刚删除了上述声明,现在我看到更改正确。

    INFO  [alembic.autogenerate.compare] Detected added column 'foo.name'

我不知道是否必须采取一些特殊措施来支持计划。也许这只是一个不受支持的功能。

0 个答案:

没有答案