【发布时间】:2020-12-30 01:02:06
【问题描述】:
我有一个连接到 PostgreSQL 数据库的烧瓶应用程序。我集成了 celery 并将其结果后端配置为 same postgresql 数据库。
Celery automatically created two tables (Task and TaskSet) in the database.
flask 应用中使用的其他表在代码中有类定义,并使用 alembic (flask-migrate) 生成:
$ flask db migrate -m "add a table" (creates migration file)
$ flask db upgrade (applies changes in migration file to the db)
问题
我在代码中为表格添加了一个新类并运行flask db migrate -m "add test table"。
该命令生成一个迁移文件,这里是有问题的 sn-p:
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')
因为 celery 的 Task 和 Taskset 表的类定义不在我的代码中,Alembic 试图删除它们。
我研究了是否可以覆盖 celery 创建的 Task 和 TaskSet 表,以便我可以通过迁移手动创建表,但找不到任何文档。我查看了database_table_name 和database_table_schemas 配置属性,但看起来它们无法解决问题。 Celery docs.
问题:
-
有没有办法覆盖/继承 celery 创建的表,以便我可以通过迁移手动生成它们? 即我创建了一个继承 celery 任务表的自定义任务表,然后执行迁移以创建该表。
from celery.backends.database.models import Task from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class CustomTask(db.Model, Task): pass -
我可以将 alembic 配置为忽略 celery 创建的表吗?
-
有没有更好的方法?我的方法可能完全关闭
编辑:
看起来您可以指定在 alembic/flask-migrate 中忽略哪些表: Preserve existing tables in database when running Flask-Migrate
【问题讨论】:
标签: python flask celery flask-sqlalchemy flask-migrate