Python 由芹菜创建的表格

Python 由芹菜创建的表格,python,flask,celery,flask-sqlalchemy,flask-migrate,Python,Flask,Celery,Flask Sqlalchemy,Flask Migrate,我有一个连接到PostgreSQL数据库的flask应用程序。我集成了芹菜,并将其结果后端配置为相同的postgresql数据库 flask应用程序中使用的其他表在代码中有类定义,并使用alembic(flask migrate)生成: 问题 我在代码中为一个表添加了一个新类,并运行了flaskdb-migrate-m“addtesttable” 该命令将生成一个迁移文件,下面是有问题的代码段: def upgrade(): op.create_table('TestTable',

我有一个连接到PostgreSQL数据库的flask应用程序。我集成了芹菜,并将其结果后端配置为相同的postgresql数据库

flask应用程序中使用的其他表在代码中有类定义,并使用alembic(flask migrate)生成:

问题

我在代码中为一个表添加了一个新类,并运行了
flaskdb-migrate-m“addtesttable”

该命令将生成一个迁移文件,下面是有问题的代码段:

def upgrade():
    op.create_table('TestTable',
       sa.Column('id', sa.Integer(), nullable=False),
       sa.PrimaryKeyConstraint('id')
    )


    # DROP HERE
    op.drop_table('taskset')
    op.drop_table('task')

因为芹菜的任务和任务集表的类定义不在我的代码中,Alembic试图删除它们

我已经研究过是否可以覆盖芹菜创建的任务和任务集表,以便我可以通过迁移手动创建这些表,但找不到任何文档。我已经查看了
数据库\u表\u名称
数据库\u表\u架构
配置属性,但它们似乎无法解决问题

问题:

  • 是否有方法覆盖/继承芹菜创建的表,以便我可以通过迁移手动生成它们? i、 我创建一个自定义任务表,它继承芹菜任务表,然后执行迁移来创建该表

    from celery.backends.database.models import Task
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    
    class CustomTask(db.Model, Task):
        pass
    
  • 我可以将alembic配置为忽略芹菜创建的表吗

  • 有更好的办法吗?我的方法可能完全失败了

  • 编辑:

    看起来您可以指定在alembic/flask迁移中忽略哪些表:

    您可以使用Alembic的
    include_object
    选项,使芹菜桌不受影响。您仍将使用芹菜创建表格

    • 文件:
    • 实例:
    这通过防止Alembic在每次自动生成新数据库迁移时尝试删除芹菜表来解决问题。但是,此解决方案不会将芹菜表合并到数据库迁移存储库中

    解决此问题的第二种方法是将芹菜表作为模型类或仅作为表添加到SQLAlchemy配置中。为此,您需要查看这些表的模式,并将其复制到SQLAlchemy表或模型定义中。这将使这些表出现在数据库迁移中,因此在您启动新数据库时将重新创建它们

    from celery.backends.database.models import Task
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    
    class CustomTask(db.Model, Task):
        pass