Вставьте иностранные данные в инструкцию RAW SQL в файле миграции в Django - PullRequest
0 голосов
/ 14 октября 2019

Вопрос касается пользовательского файла миграции.

from django.db import migrations
from django.contrib.contenttypes.models import ContentType


class Migration(migrations.Migration):

    dependencies = [
        ('api', '0007_auto_20191013_1553'),
    ]

    try:
        con = ContentType.objects.get_by_natural_key(app_label='api', model='product')
        model = ContentType.model_class(con)
        db_table = model._meta.db_table

        operations = [
            migrations.RunSQL(
                """           
                DROP TRIGGER IF EXISTS text_searchable_update ON %(db_table)s;  
                """,
                {'db_table': db_table}
            ),

            migrations.RunSQL(
                """
                CREATE TRIGGER text_searchable_update BEFORE INSERT OR UPDATE
                ON %(db_table)s FOR EACH ROW EXECUTE FUNCTION
                tsvector_update_trigger(textsearchable_index_col, 'pg_catalog.english', description)
                """,
                {'db_table': db_table}
            )
        ]
    except ContentType.DoesNotExist:
        operations = []

Цель этой миграции - создать триггер в столбце БД textsearchable_index_col для обновления сохраненного вектора в случае, если столбец description создан или обновлен.

Проблема в том, что я хочу убедиться, что триггер создан на правильной таблице в случае изменения db_table имени. Так что я получаю db_table = model._meta.db_table и хочу вставить значение db_table в необработанный оператор SQL, но, похоже, я не знаю, как это сделать. В примере в Django docs они используют % s formattig, но это вызывает SQL syntax error во время процесса миграции. Вопрос в том, как вставить db_table или любые сторонние данные в широком смысле внутри этой команды SQL. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...