如何使用Alembic删除SQLAlchemy-Searchable触发器



我正在尝试正确设置数据库迁移文件,但没有找到降级部分的显式语法。 使用 Flask-SQLAlchemy、Postgres 和使用 Alembic 的 Flask-Migrate

我的(减少的(代码如下所示:

from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils
from sqlalchemy_searchable import sync_trigger
# revision identifiers, used by Alembic....(cut for space)
def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('project_note',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('text', sa.Text(), nullable=False),
    sa.Column('search_vector', sqlalchemy_utils.types.ts_vector.TSVectorType(), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index('ix_project_note_search_vector', 'project_note', ['search_vector'], unique=False, postgresql_using='gin')
    # ### end Alembic commands ###
    # Manually added commands
    conn = op.get_bind()
    sync_trigger(conn, 'project_note', 'search_vector', ['text'])

def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_index('ix_project_note_search_vector', table_name='project_note')
    op.drop_index(op.f('ix_project_note_project_id'), table_name='project_note')
    op.drop_table('project_note')
    # ### end Alembic commands ###

在降级过程中我需要做些什么来清理触发器,还是删除表对我有用?

我找到了文档和相关代码

from alembic import op
from sqlalchemy_searchable import sync_trigger

def upgrade():
    conn = op.get_bind()
    op.add_column('article', sa.Column('content', sa.Text))
    sync_trigger(conn, 'article', 'search_vector', ['name', 'content'])
# ... same for downgrade

# ... same for downgrade部分尚不清楚。 它是否意味着像这样的完全相同的代码(用删除而不是添加(?

def downgrade():
        op.drop_column('article', 'content')
        conn = op.get_bind()
        sync_trigger(conn, 'article', 'search_vector', ['name', 'content'])

我在开始新表时遇到了更多麻烦。 如果我把

sync_trigger(conn, 'project_note', 'search_vector', ['text'])

在 Alembic 命令之前,触发功能被抛在后面。 如果是在 Alembic 生成的命令之后,则会收到一条错误消息,指出该表不存在。 我还没有找到sync_trigger indexed_columns参数的参数,该参数删除了所有内容而不进行任何新内容。 空列表不起作用。

答案是肯定的,您应该以与upgrade完全相同的方式调用sync_triggersync_trigger的文件如下:

1. Drops search trigger for given table (if it exists)
2. Drops search function for given table (if it exists)
3. Creates search function for given table
4. Creates search trigger for given table

请注意前两点。

最新更新