我使用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?我不想做后者,我以前从未这样做过。如果有必要,那该怎么办?
答案 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')