如何在 Alembic 迁移中指定全文搜索索引 (MySQL)?
How to specify a full text search index (MySQL) in an Alembic migration?
我正在将 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 吗?我不愿意做后者,而且我以前从未这样做过。如果有必要,它是如何工作的?
从关于 create_index()
的 Alembic 文档中我们发现
- **kw – Additional keyword arguments not mentioned above are dialect specific, and passed in the form
<dialectname>_<argname>
. See the documentation regarding an individual dialect at Dialects for detail on documented arguments.
然后在 MySQL 方言文档中 "Index Prefixes":
MySQL storage engines permit you to specify an index prefix when creating an index. SQLAlchemy provides this feature via the mysql_prefix
parameter on Index
:
Index('my_index', my_table.c.data, mysql_prefix='FULLTEXT')
鉴于以上,您的 Alembic 迁移应该像这样定义索引:
op.create_index(..., mysql_prefix='FULLTEXT')
我正在将 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 吗?我不愿意做后者,而且我以前从未这样做过。如果有必要,它是如何工作的?
从关于 create_index()
的 Alembic 文档中我们发现
- **kw – Additional keyword arguments not mentioned above are dialect specific, and passed in the form
<dialectname>_<argname>
. See the documentation regarding an individual dialect at Dialects for detail on documented arguments.
然后在 MySQL 方言文档中 "Index Prefixes":
MySQL storage engines permit you to specify an index prefix when creating an index. SQLAlchemy provides this feature via the
mysql_prefix
parameter onIndex
:Index('my_index', my_table.c.data, mysql_prefix='FULLTEXT')
鉴于以上,您的 Alembic 迁移应该像这样定义索引:
op.create_index(..., mysql_prefix='FULLTEXT')