Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶迁移:明显未检测到柱添加/移除,而是重新创建表格_Python_Flask_Alembic_Flask Migrate - Fatal编程技术网

Python 烧瓶迁移:明显未检测到柱添加/移除,而是重新创建表格

Python 烧瓶迁移:明显未检测到柱添加/移除,而是重新创建表格,python,flask,alembic,flask-migrate,Python,Flask,Alembic,Flask Migrate,我在带有Postgresql后端的Flask应用程序中使用Flask迁移。问题是,在对我的模型进行更改(比如添加或删除列)之后,在我尝试过的任何修订或迁移中,我总是会得到与 INFO [alembic.autogenerate.compare] Detected added table u'foo' 而migrations/versions中的每个脚本都包含创建表的代码,例如 def upgrade(): ### commands auto generated by Alembic

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

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'

我按照这篇文章中的说明做。相关设置如下所示:

    ### __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)
我遵循了这些问题中给出的一些建议: 一点运气都没有

知道我做错了什么吗

提前谢谢

已解决

我刚刚发现了问题。我喜欢使用DB模式,我就是这么做的

    db.metadata.schema = app.config['DB_SCHEMA']
似乎
alembic
不知何故没有意识到模式的固有范围,因此它总是重新创建表。排序:没有表
foo
——在最外层的全局“模式”或范围中——因此我必须
创建该表。即使在第一次迁移正确地创建了表之后,这种情况仍在发生。当然,执行第二次迁移并不令人惊讶

    sqlalchemy.exc.ProgrammingError: (ProgrammingError) relation "foo" already exists
我刚刚放弃了上面的声明,现在我看到了正确的更改

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

我不知道我是否需要做一些特殊的事情来支持这些计划。可能这只是一个不受支持的功能。

生成迁移时,数据库中是否存在表“foo”?表似乎不存在。不,我从一个空数据库开始。事实上,我正在“微博”上一步一步地关注这个博客,我试图理解DB迁移背后的原理。我刚刚发现发生了什么。见我的答案:)。谢谢!
    INFO  [alembic.autogenerate.compare] Detected added column 'foo.name'