Мне известен объект курсора в Django. Есть ли другой предпочтительный способ выполнения сырого SQL при миграции? Я хочу ввести разбиение postgresql для одной из моих таблиц моделей. Логика раздела представляет собой набор функций и триггеров, которые необходимо добавить в базу данных при настройке, которую я хотел бы автоматизировать.Как выполнить необработанный SQL в миграции django
ответ
Один из способов:
Лучший способа я нашел, чтобы сделать это с помощью RunSQL:
Миграции содержит класс RunSQL. Для этого:
./manage.py makemigrations --empty myApp
- редактировать созданный файл миграции включает:
operations = [ migrations.RunSQL('RAW SQL CODE') ]
Как уже упоминалось Натаниэль Найт, RunSQL
также принимает параметр reverse_sql
для реверсирования миграции. See the docs for details
Другой способ
Как я решить мою проблему первоначально использовал post_migrate
сигнал вызова курсор, чтобы выполнить мой сырой SQL.
То, что я должен был добавить в мое приложение было это:
в __init__.py
из MYAPP добавить:
default_app_config = 'myApp.apps.MyAppConfig'
Создайте файл apps.py
:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from myApp.db_partition_triggers import create_partition_triggers
class MyAppConfig(AppConfig):
name = 'myApp'
verbose_name = "My App"
def ready(self):
post_migrate.connect(create_partition_triggers, sender=self)
Новый файл db_partition_triggers.py
:
from django.db import connection
def create_partition_triggers(**kwargs):
print ' (re)creating partition triggers for myApp...'
trigger_sql = "CREATE OR REPLACE FUNCTION...; IF NOT EXISTS(...) CREATE TRIGGER..."
cursor = connection.cursor()
cursor.execute(trigger_sql)
print ' Done creating partition triggers.'
Теперь на каждом manage.py syncdb
или manage.py migrate
вызывается эта функция. Поэтому убедитесь, что он использует CREATE OR REPLACE
и IF NOT EXISTS
. Таким образом, он может обрабатывать существующие функции.
- 1. Как выполнить необработанный SQL в приложении SQLAlchemy-flask
- 2. Как выполнить необработанный sql-запрос в рамках сущности?
- 3. Выполнить SQL запрос в моей EF миграции
- 4. Как написать необработанный SQL-запрос в Django QuerySet?
- 5. База данных Django - как добавить этот столбец в необработанный SQL
- 6. Django Перестроить все миграции
- 7. Как выполнить необработанный запрос в доктрине mongodb
- 8. Пользовательский sql в миграции django не работает
- 9. django юг проблема миграции
- 10. Как выполнить этот sql в модели django?
- 11. Поддерживает ли Django миграции миграции
- 12. Как выполнить мой скрипт миграции sql в оболочке MYSQL?
- 13. Составной запрос в django - используйте дополнительный, аннотированный или необработанный sql?
- 14. Django Миграции
- 15. Как реализовать необработанный SQL-запрос в Tastypie
- 16. Fake миграции Django (в самой миграции)
- 17. Как выполнить необработанный запрос с возвратом в SQLAlchemy
- 18. Изменения миграции миграции Django 1.7.2 постоянно обнаруживаются
- 19. Сделать миграции Условное в Django
- 20. Сломанные миграции в Django
- 21. Джанго JOIN: необработанный SQL vs. в памяти
- 22. Как обрабатывать миграции в CI приложения django
- 23. Как перевести этот необработанный запрос Django ORM
- 24. Как выполнить SQL Sum (*) с Django ORM?
- 25. Как использовать необработанный запрос в Django в другом наборе запросов?
- 26. Джанго получает исполняемый необработанный SQL для QuerySet
- 27. Как выполнить множественный необработанный запрос с использованием laravel?
- 28. Как удалить существующие миграции в Django 1.7
- 29. Как сделать необработанный SQL в Rails-контроллере?
- 30. Получить необработанный запрос от executemany (sql, params) django/postgresql
Есть ли способ добавить обратную миграцию для suctom sql? – DataGreed
Вы действительно должны перенести заметку о RunSQL в начало. Это самый лучший способ сделать это ... –
@DataGreed Не уверен, что вы все еще хотите знать, но вы можете передать вторую строку SQL, которая будет использоваться в качестве обратного sql. – LarrikJ