PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để thực thi SQL thô trong quá trình di chuyển django

Một cách:

Cách tốt nhất tôi thấy để làm điều này là sử dụng RunSQL:

Migrations chứa lớp RunSQL. Để làm điều này:

  1. ./manage.py makemigrations --empty myApp
  2. chỉnh sửa tệp di chuyển đã tạo để bao gồm:

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

Như Nathaniel Knight đã đề cập, RunSQL cũng chấp nhận reverse_sql tham số để đảo ngược quá trình di chuyển. Xem tài liệu để biết chi tiết

Một cách khác

Cách tôi giải quyết vấn đề của mình ban đầu là sử dụng post_migrate ra hiệu để gọi một con trỏ để thực thi SQL thô của tôi.

Những gì tôi phải thêm vào ứng dụng của mình là:

trong __init__.py của myApp thêm:

default_app_config = 'myApp.apps.MyAppConfig'

Tạo tệp 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)

Tệp mới 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.'

Bây giờ trên mọi manage.py syncdb hoặc manage.py migrate hàm này được gọi. Vì vậy, hãy đảm bảo rằng nó sử dụng CREATE OR REPLACEIF NOT EXISTS . Vì vậy, nó có thể xử lý các chức năng hiện có.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'Không thể tìm thấy pg-0.12.2 trong bất kỳ nguồn nào' khi chạy rspec

  2. @T sẵn có (spring-data-react-mongodb) tương đương trong spring-data-r2dbc

  3. Tạo thực thể cho một bảng

  4. Thực thi nhiều câu lệnh với Postgresql thông qua SQLAlchemy không tiếp tục thay đổi

  5. Làm cách nào để thêm khóa chính tự động tăng dần vào bảng hiện có, trong PostgreSQL?