如何在Alembic迁移中指定全文搜索索引(MySQL)?

时间:2018-05-20 21:11:43

标签: python sqlalchemy alembic flask-migrate sqlalchemy-migrate

我使用Flask-Migrate进行目标数据库与MySQL兼容的Aurora的项目。

我使用Menzhuo's SQLAlchemy fulltext search module为模型添加了全文索引:

class Post(db.Model, FullText, Serializable):
    __tablename__ = 'post'
    __fulltext_columns__ = ('description', 'text')
    id = db.Column(db.String(10), primary_key=True)
    description = db.Column(db.String(256))
    .
    .
    .

现在,当我使用Flask-Migrate生成迁移时,未自动拾取全文索引。我很清楚Flask-Migrate不会选择所有,并且您必须手动添加一些内容到迁移脚本。

例如,我知道如何手动插入

等行
op.add_column(...)
op.create_unique_constraint(...)
op.create_index(...)

生成的迁移中的upgrade方法内部。但是,当我查看create_index documentation for Alembic时,我看不到任何支持创建全文索引。我看到唯一索引的unique参数,但全文索引没有。

所以我错过了在Alembic中直接执行此操作的方法(可能使用SQLAlchemy命令)?或者我是否必须直接编写SQL?我不想做后者,我以前从未这样做过。如果有必要,那该怎么办?

1 个答案:

答案 0 :(得分:2)

create_index()的Alembic文档中我们发现

  
      
  • ** kw - 上面未提及的其他关键字参数是特定于方言的,并以<dialectname>_<argname>的形式传递。有关记录在案的论点的详细信息,请参阅Dialects处有关单个方言的文档。
  •   

然后在"Index Prefixes"下的MySQL方言文档中:

  

MySQL存储引擎允许您在创建索引时指定索引前缀。 SQLAlchemy通过Index上的mysql_prefix参数提供此功能:

Index('my_index', my_table.c.data, mysql_prefix='FULLTEXT')

鉴于上述情况,您的Alembic迁移应该像这样定义索引:

op.create_index(..., mysql_prefix='FULLTEXT')