2011-11-02 27 views
6

ORM của Django hỗ trợ truy vấn từ một cơ sở dữ liệu cụ thể (khi nhiều được xác định trong dự án của bạn) thông qua hàm .using() cho các hoạt động dựa trên bộ lọc.Sử dụng Django ORM get_or_create với nhiều cơ sở dữ liệu

ví dụ: MyModel.objects.filter(name='Bob').using('my_non_default_database')

Bạn sẽ làm như thế nào khi tạo bản ghi mới, qua lớp MyModel() hoặc phím tắt như get_or_create()?

Trả lời

10

using là một phương pháp trên người quản lý MyModel.objects, vì vậy bạn có thể làm

MyModel.objects.using('my_non_default_database').get_or_create(name="Bob") 

Nếu bạn có một trường hợp MyModel, bạn có thể sử dụng từ khoá sử dụng để xác định các cơ sở dữ liệu để lưu vào. Các django docs chỉ ra một số gotchas.

my_model = MyModel(name="Bob") 
my_model.save(using='my_non_default_database') 
+0

Làm cách nào để xử lý mô hình thông thường? ví dụ. MyModel (name = 'bob') – Cerin

+1

Lưu có đối số từ khóa 'using'. Tôi đã cập nhật câu trả lời của mình. – Alasdair

4

using chỉ là một phần của chuỗi truy vấn chuẩn. Vì vậy, bạn có thể sử dụng nó bất cứ nơi nào trước khi truy vấn được gửi đến DB. get_or_create, không giống như filter, là nguyên tử: khi bạn gọi nó, nó làm điều đó ngay lập tức, vì vậy bạn chỉ cần gọi using trước đó.

MyModel.objects.using('my_non_default_database').get_or_create(name='Bob') 
Các vấn đề liên quan