Sono a conoscenza dell'oggetto cursore in Django. C'è un altro modo preferito per eseguire SQL raw nelle migrazioni? Voglio introdurre il partizionamento postgresql per una delle tabelle dei miei modelli. La logica della partizione è un insieme di funzioni e trigger che devono essere aggiunti al database sul setup che vorrei automatizzare.Come eseguire SQL raw in una migrazione django
risposta
Un modo:
Il modo migliore che ho trovato per farlo è usare EseguiSQL:
Migrazioni contiene la classe EseguiSQL. Per fare questo:
./manage.py makemigrations --empty myApp
- modificare il file migrazioni creato per includere:
operations = [ migrations.RunSQL('RAW SQL CODE') ]
Come detto Nathaniel Knight, RunSQL
accetta anche un parametro reverse_sql
per invertire la migrazione. See the docs for details
altro modo
Il modo risolto il problema inizialmente stava usando il segnale post_migrate
di chiamare un cursore per eseguire il mio SQL prime.
Quello che avevo da aggiungere alla mia applicazione è stata questa:
nel __init__.py
di myApp aggiungere:
default_app_config = 'myApp.apps.MyAppConfig'
Creare un file 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)
Nuovo file 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.'
Ora su ogni manage.py syncdb
o manage.py migrate
viene chiamata questa funzione. Quindi assicurati che usi CREATE OR REPLACE
e IF NOT EXISTS
. Quindi può gestire le funzioni esistenti.
- 1. Django, più database con sql raw. Come scegliere db?
- 2. Come eseguire query SQL raw con Zend Framework 2
- 3. Come disinfettare SQL raw in Rails 4
- 4. migrazione django Nessuna migrazione da applicare
- 5. Domanda SQL raw CakePHP 3
- 6. migrazione django db riuscita con postgres
- 7. Django 1.8 Esegui una migrazione specifica
- 8. Come scrivere SQL in una migrazione in Rails
- 9. Ottenere la migrazione SQL da una rotaia
- 10. e query con sql raw?
- 11. Ottenere query SQL raw in CodeIgniter 1.7
- 12. Come eseguire l'aggiornamento in migrazione per Ecto?
- 13. Come eseguire una migrazione LightData CoreData in Swift
- 14. Django sud - come abbandonare una migrazione errata (e rotta)
- 15. Run SQL prime in migrazione
- 16. Esempio SQL raw delle rotaie
- 17. ordine di migrazione django-sud
- 18. Chiama sql esterno da una migrazione flyway
- 19. Come eseguire più comandi SQL in una singola connessione SQL?
- 20. Come ripetere una migrazione su django 1.8 dopo l'uso --fake
- 21. Stucked in una migrazione sud django - errore TransactionManagement
- 22. Migrazione del database SQL Server in SQL Azure
- 23. Django ForeignKey Instance vs Raw ID
- 24. Come si uniscono due tabelle usando Django senza usare raw sql?
- 25. Come eseguire query SQL raw utilizzando Entity Framework senza dover utilizzare un modello?
- 26. Revert Django 1.7 RemoveField migrazione
- 27. Propel: ottieni SQL raw dall'oggetto Query?
- 28. Come annullare l'applicazione la prima migrazione in Django 1.7
- 29. Eseguire una query SQL in JS
- 30. Utilizzo di SQL raw con Doctrine
C'è un modo per aggiungere backwards-migration per suctom sql? – DataGreed
Dovresti davvero spostare la nota su RunSQL in alto. È assolutamente il modo migliore per farlo ... –
@DataGreed Non sei sicuro di voler sapere, ma puoi passare una seconda stringa SQL da utilizzare come sql inverso. – LarrikJ