21

我需要将 FULLTEXT 索引添加到我的 Django 模型的一个字段中,并且了解没有内置功能可以执行此操作,并且必须在 mysql(我们的后端数据库)中手动添加这样的索引。

我希望在每个环境中都创建这个索引。我知道模型更改可以处理 Django 南迁移,但是有没有办法可以添加这样的 FULLTEXT 索引作为迁移的一部分?

一般来说,如果有任何自定义 SQL 需要运行,我怎样才能使它成为迁移的一部分。

谢谢。

4

2 回答 2

33

您可以编写任何内容作为迁移。这才是重点!

South启动并运行后,键入以python manage.py schemamigration myapp --empty my_custom_migration创建可以自定义的空白迁移。

打开XXXX_my_custom_migration.py文件myapp/migrations/并在方法中输入您的自定义 SQL 迁移forwards。例如你可以使用db.execute

迁移可能如下所示:

class Migration(SchemaMigration):

    def forwards(self, orm):
        db.execute("CREATE FULLTEXT INDEX foo ON bar (foobar)")
        print "Just created a fulltext index..."
        print "And calculated {answer}".format(answer=40+2)


    def backwards(self, orm):
        raise RuntimeError("Cannot reverse this migration.") 
        # or what have you


$ python manage.py migrate myapp XXXX # or just python manage.py migrate.
"Just created fulltext index...."
"And calculated 42"
于 2011-03-28T23:33:28.640 回答
3

在较新版本的 Django 中,您可以创建一个空迁移来执行自定义 sql:python3 manage.py makemigrations --empty app_name

然后,在生成的迁移中:

from django.db import migrations

class Migration(migrations.Migration):

    operations = [
        migrations.RunSQL(
            sql="CREATE FULLTEXT INDEX `index_name` on table_name(`column_name`);",
            reverse_sql="ALTER TABLE table_name DROP INDEX index_name"
        )
    ]
于 2020-04-15T19:32:53.910 回答