我需要将 FULLTEXT 索引添加到我的 Django 模型的一个字段中,并且了解没有内置功能可以执行此操作,并且必须在 mysql(我们的后端数据库)中手动添加这样的索引。
我希望在每个环境中都创建这个索引。我知道模型更改可以处理 Django 南迁移,但是有没有办法可以添加这样的 FULLTEXT 索引作为迁移的一部分?
一般来说,如果有任何自定义 SQL 需要运行,我怎样才能使它成为迁移的一部分。
谢谢。
我需要将 FULLTEXT 索引添加到我的 Django 模型的一个字段中,并且了解没有内置功能可以执行此操作,并且必须在 mysql(我们的后端数据库)中手动添加这样的索引。
我希望在每个环境中都创建这个索引。我知道模型更改可以处理 Django 南迁移,但是有没有办法可以添加这样的 FULLTEXT 索引作为迁移的一部分?
一般来说,如果有任何自定义 SQL 需要运行,我怎样才能使它成为迁移的一部分。
谢谢。
您可以编写任何内容作为迁移。这才是重点!
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"
在较新版本的 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"
)
]