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

标签 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 吗?我不愿意做后者,而且我以前从未这样做过。如果有必要的话,它是如何工作的?

最佳答案

摘自 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')

关于python - 如何在 Alembic 迁移中指定全文搜索索引 (MySQL)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439408/

相关文章:

MySQL 从最后 N 组中选择所有行

sqlalchemy - add_column中使用的Alembic默认值

python - 使用 StringEncryptedType、SQLAlchemy 时出现 VARCHAR 长度错误

python - Alembic 迁移以将串行字段转换为整数

python - 将颜色打印到 python 命令行

Python OpenCV 错误 : "TypeError: Image data cannot be converted to float"

python - 如何使用 Mock 框架更改模拟方法的输出?

python - 从 FastAPI 中发布的 Pydantic 模型更新 SQLAlchemy ORM 现有模型?

python - 在两个列表中循环

python - 如何使用 ElementTree 在父元素的文本之间插入 XML 元素