Django south migration - Adding FULLTEXT indexes

前端 未结 2 2107
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-12 13:59

I need to add a FULLTEXT index to one of my Django model\'s fields and understand that there is no built in functionality to do this and that such an index must be added manuall

相关标签:
2条回答
  • 2021-02-12 14:27

    In newer versions of Django, you can create an empty migration for execute custom sql: python3 manage.py makemigrations --empty app_name

    Then, in the generated migration:

    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"
            )
        ]
    
    0 讨论(0)
  • 2021-02-12 14:29

    You can write anything as a migration. That's the point!

    Once you have South up and running, type in python manage.py schemamigration myapp --empty my_custom_migration to create a blank migration that you can customize.

    Open up the XXXX_my_custom_migration.py file in myapp/migrations/ and type in your custom SQL migration there in the forwards method. For example you could use db.execute

    The migration might look something like this:

    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"
    
    0 讨论(0)
提交回复
热议问题