Django南迁移 - 添加FULLTEXT索引

时间:2011-03-28 21:33:17

标签: mysql django migration django-south

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

我希望在每个环境中创建此索引。我理解模型更改可以用Django南迁移来处理,但有没有办法在迁移过程中添加这样的FULLTEXT索引?

通常,如果需要运行任何自定义SQL,我该如何将其作为迁移的一部分。

感谢。

2 个答案:

答案 0 :(得分:32)

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

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

打开XXXX_my_custom_migration.py中的myapp/migrations/文件,然后在forwards方法中输入自定义SQL迁移。例如,您可以使用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"

答案 1 :(得分:1)

在较新版本的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"
        )
    ]