Tôi biết đối tượng con trỏ ở Django. Có cách nào ưu tiên khác để thực thi SQL thô trong di chuyển không? Tôi muốn giới thiệu phân vùng postgresql cho một trong các bảng mô hình của tôi. Logic phân vùng là một loạt các hàm và trình kích hoạt cần phải được thêm vào cơ sở dữ liệu khi thiết lập mà tôi muốn tự động hóa.Làm cách nào để thực thi SQL thô trong di chuyển django
Trả lời
Một cách:
Cách tốt nhất mà tôi tìm thấy để làm điều này là sử dụng RunSQL:
Migrations chứa các lớp RunSQL. Để làm điều này:
./manage.py makemigrations --empty myApp
- chỉnh sửa di cư tạo ra tập tin bao gồm:
operations = [ migrations.RunSQL('RAW SQL CODE') ]
Như Nathanial Knight đã đề cập, RunSQL
cũng chấp nhận một tham số reverse_sql
cho đảo ngược sự di cư. See the docs for details
Một cách khác
Con đường tôi giải quyết vấn đề của tôi ban đầu đã sử dụng các tín hiệu post_migrate
để gọi một con trỏ để thực hiện SQL liệu của tôi.
Những gì tôi có để thêm vào ứng dụng của tôi là thế này:
trong __init__.py
của MyApp thêm:
default_app_config = 'myApp.apps.MyAppConfig'
Tạo một 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)
mới tập 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 số manage.py syncdb
hoặc manage.py migrate
chức năng này được gọi. Vì vậy, hãy đảm bảo sử dụng CREATE OR REPLACE
và IF NOT EXISTS
. Vì vậy, nó có thể xử lý các chức năng hiện có.
- 1. Làm cách nào để thực thi truy vấn sql thô trong khung thực thể?
- 2. Run SQL thô trong di cư
- 3. Làm cách nào để bỏ qua di chuyển bằng lệnh di chuyển Django?
- 4. Django: Paginator + truy vấn SQL thô
- 5. Làm cách nào để tải tệp thực thi ELF có thể di chuyển lại?
- 6. Làm cách nào để thực thi truy vấn thô với Laravel 5.1?
- 7. Làm cách nào để chuyển giá trị biến hệ thống cho câu lệnh SQL trong thực thi SQL?
- 8. Làm thế nào để thực thi ngữ nghĩa di chuyển khi một véc tơ tăng lên?
- 9. Làm thế nào để thực thi tệp sql từ java
- 10. Làm cách nào để thực thi tệp SQL 3GB (Microsoft SQL Server)?
- 11. Làm thế nào để di chuyển trở lại từ di cư ban đầu trong Django 1.7?
- 12. Django, nhiều cơ sở dữ liệu với sql thô. Làm thế nào để chọn db?
- 13. Làm cách nào để chuyển JSON thô qua Jackson?
- 14. Cách tốt nhất để di chuyển dữ liệu trong django
- 15. Làm thế nào để di chuyển cơ sở dữ liệu SQL Server sang MySQL?
- 16. Làm cách nào để thực thi thủ tục được lưu trữ trong tác vụ SQL Agent?
- 17. Làm cách nào để thực thi nhiều câu lệnh trong Web SQL?
- 18. Làm cách nào để thực thi một tập hợp các tệp .SQL từ trong SSMS?
- 19. Làm cách nào để thực thi truy vấn SQL của tôi trong CodeIgniter
- 20. Di chuyển từ mô-đun không được thực thi bởi lệnh di chuyển yiic
- 21. Làm thế nào để thực thi truy vấn SQL thô bằng cách sử dụng khung thực thể mà không cần phải sử dụng một mô hình?
- 22. Di chuyển đồ đạc Django?
- 23. Làm cách nào để di chuyển thẻ?
- 24. Làm cách nào để thực thi tệp trong C#?
- 25. Làm cách nào để thực thi mã có trong chuỗi?
- 26. Làm cách nào để di chuyển một bảng vào một giản đồ trong T-SQL
- 27. Di chuyển thẻ url để django 1,5
- 28. Django: tạo truy vấn SQL thô, chuyển nhiều tham số lặp lại/lặp lại?
- 29. Làm cách nào để chuyển đổi chuỗi thành một dòng mã thực thi trong Javascript?
- 30. Làm cách nào để sửa đổi di chuyển trong Laravel?
Có cách nào để thêm di chuyển ngược cho sql suctom không? – DataGreed
Bạn nên thực sự di chuyển ghi chú của mình về RunSQL lên đầu. Nó hoàn toàn là cách tốt nhất để làm điều này ... –
@DataGreed Không chắc chắn nếu bạn vẫn muốn biết, nhưng bạn có thể vượt qua một chuỗi SQL thứ 2 được sử dụng như là sql đảo ngược. – LarrikJ