PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menjalankan SQL mentah dalam migrasi Django

Satu arah:

Cara terbaik yang saya temukan untuk melakukan ini adalah menggunakan RunSQL:

Migrasi berisi kelas RunSQL. Untuk melakukan ini:

  1. ./manage.py makemigrations --empty myApp
  2. edit file migrasi yang dibuat untuk menyertakan:

operations = [ migrations.RunSQL('RAW SQL CODE') ]

Seperti yang disebutkan Nathaniel Knight, RunSQL juga menerima reverse_sql parameter untuk membalikkan migrasi. Lihat dokumen untuk detailnya

Cara lain

Cara saya memecahkan masalah saya awalnya menggunakan post_migrate sinyal untuk memanggil kursor untuk mengeksekusi SQL mentah saya.

Yang harus saya tambahkan ke aplikasi saya adalah ini:

di __init__.py dari myApp tambahkan:

default_app_config = 'myApp.apps.MyAppConfig'

Buat 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)

File baru 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.'

Sekarang di setiap manage.py syncdb atau manage.py migrate fungsi ini disebut. Jadi pastikan menggunakan CREATE OR REPLACE dan IF NOT EXISTS . Sehingga dapat menangani fungsi yang ada.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lokasi database postgresql di OS X?

  2. Tutorial Ruby PostgreSQL

  3. Bagaimana saya bisa menambahkan kolom yang tidak mengizinkan nol dalam database Postgresql?

  4. Kondisi berhenti CTE rekursif untuk loop

  5. Urutan di Oracle/PostgreSQL tanpa ID dalam pernyataan penyisipan