首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单个数据库上使用flask-migrate创建具有不同模式的多个表

在单个数据库上使用flask-migrate创建具有不同模式的多个表
EN

Stack Overflow用户
提问于 2020-06-15 06:44:53
回答 1查看 667关注 0票数 0

我使用flask-migrate来处理表的创建和维护。我有多个具有不同模式的表。

代码语言:javascript
复制
 class A(db.model):
      __tablename__ = 'A'
      __table_args__ = {'schema': 'public'}
      # rest of data

 class B(db.model):
      __tablename__ = 'B'
      __table_args__ = {'schema': 'schema_b'}
      # rest of data    

因此,当我运行flask db initflask db migrate时,会在迁移文件夹中创建一个迁移脚本。但是,当我运行flask db upgrade在数据库中添加表时,它显示了错误

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidSchemaName) schema "schema_b.B" does not exist

当我搜索这个问题时,我找到了这个include_schemasmigrate using different schema,这两个部分都提到了在migration/env.pyconfigure中使用include_schemas=True。此外,答案中的解决方案中提到的链接具有无效链接,因此这对我来说变得有点程序化。

我已经做了相应的修改。然后,我运行flask db migrate,它正在检测具有所有模式的所有表。但是当我运行flask db upgrate

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidSchemaName) schema "schema_b.B" does not exist

错误再次出现。

帮帮我,如何使用flask migrate解决这个问题。为了创建表,我有一个SQL命令,它工作得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-16 18:23:50

include_schemas=True选项使Alembic在您的非默认模式中查找表,但当您将它们添加到模型定义中时,它不能生成新模式。

在这种情况下,您需要做的是运行flask db migrate来生成迁移,然后打开生成的迁移脚本,并在创建新表之前添加模式创建。例如,在您的问题中的示例中,您对B模型的迁移或多或少是这样生成的:

代码语言:javascript
复制
def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('schema_b.B',
        # ...
    )
    # ### end Alembic commands ###

因此,您需要在创建表的过程中添加模式创建语句,以便在创建表时该模式已经存在:

代码语言:javascript
复制
def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.execute('create schema schema_b')  # <--- add this
    op.create_table('schema_b.B',
        # ...
    )
    # ### end Alembic commands ###

然后为了保持一致性,还要删除降级路径上的模式:

代码语言:javascript
复制
def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('schema_b.B')
    op.execute('drop schema schema_b')  # <--- add this
    # ### end Alembic commands ###
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62379054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档