【问题标题】:Django south migration - Adding FULLTEXT indexesDjango 南迁移 - 添加 FULLTEXT 索引
【发布时间】:2011-07-24 20:00:21
【问题描述】:

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

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

一般来说,如果有任何自定义 SQL 需要运行,我如何将其作为迁移的一部分。

谢谢。

【问题讨论】:

    标签: mysql django migration django-south


    【解决方案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"
              )
          ]
      

      【讨论】:

        猜你喜欢
        • 2011-04-03
        • 2012-06-05
        • 2014-06-22
        • 2011-09-28
        • 2014-02-21
        • 1970-01-01
        • 2014-12-21
        • 2014-07-30
        相关资源
        最近更新 更多