2

我将 Flask-Migrate 用于目标数据库是与 MySQL 兼容的 Aurora 的项目。

我使用Menzhuo 的 SQLAlchemy 全文搜索模块为模型添加了全文索引:

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_indexAlembic 的文档时,我没有看到对创建全文索引的任何支持。我看到了unique唯一索引的参数,但没有看到全文索引。

那么我是否错过了直接在 Alembic 中执行此操作的方法(可能使用 SQLAlchemy 命令)?还是我必须编写直接的 SQL?我讨厌不得不做后者,而且我以前从未这样做过。如果这是必要的,它是如何工作的?

4

1 回答 1

4

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

  • **kw - 上面未提及的其他关键字参数是特定方言的,并以<dialectname>_<argname>. 有关文档论证的详细信息,请参阅Dialects中有关单个方言的文档。

然后在“索引前缀”下的 MySQL 方言文档中:

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

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

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

op.create_index(..., mysql_prefix='FULLTEXT')
于 2018-05-21T10:15:32.810 回答