Миграция на юг Django - Добавление индексов FULLTEXT - PullRequest
20 голосов
/ 29 марта 2011

Мне нужно добавить индекс FULLTEXT к одному из полей моей модели Django и понять, что для этого нет встроенной функциональности, и что такой индекс должен быть добавлен вручную в mysql (наша внутренняя БД).

Я хочу, чтобы этот индекс создавался в любой среде.Я понимаю, что с изменениями модели можно справиться при миграции на юг Django, но есть ли способ добавить такой индекс FULLTEXT как часть миграции?

В общем, если есть какой-либо пользовательский SQL, который нужно запустить, как я могу сделать его частью миграции.

Спасибо.

1 Ответ

32 голосов
/ 29 марта 2011

Вы можете написать что угодно в качестве миграции. В этом все дело!

После того как 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"
...