Django 南迁移 - 添加 FULLTEXT 索引
Posted
技术标签:
【中文标题】Django 南迁移 - 添加 FULLTEXT 索引【英文标题】:Django south migration - Adding FULLTEXT indexes 【发布时间】:2011-07-24 20:00:21 【问题描述】:我需要在我的 Django 模型的一个字段中添加 FULLTEXT 索引,并且了解没有内置功能可以执行此操作,并且必须在 mysql(我们的后端数据库)中手动添加这样的索引。
我希望在每个环境中都创建此索引。我知道模型更改可以处理 Django 南迁移,但是有没有办法可以添加这样的 FULLTEXT 索引作为迁移的一部分?
一般来说,如果有任何自定义 SQL 需要运行,我如何将其作为迁移的一部分。
谢谢。
【问题讨论】:
【参考方案1】:您可以编写任何内容作为迁移。这就是重点!
South
启动并运行后,输入 python manage.py schemamigration myapp --empty my_custom_migration
以创建可以自定义的空白迁移。
在myapp/migrations/
中打开XXXX_my_custom_migration.py
文件,然后在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"
【讨论】:
【参考方案2】:在较新版本的 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"
)
]
【讨论】:
以上是关于Django 南迁移 - 添加 FULLTEXT 索引的主要内容,如果未能解决你的问题,请参考以下文章
陷入 django 南迁移 - TransactionManagement 错误