2013-08-22 28 views
15

Tôi đang cố gắng để hiểu bulk_create trong DjangoDjango chức năng bulk_create dụ

Đây là truy vấn ban đầu của tôi, tôi đang cố gắng để chuyển đổi:

for e in q: 
    msg = Message.objects.create(
     recipient_number=e.mobile, 
     content=batch.content, 
     sender=e.contact_owner, 
     billee=batch.user, 
     sender_name=batch.sender_name 
    ) 

Điều đó có nghĩa làm như sau (bên dưới) sẽ lặp và tạo tất cả các mục đầu tiên sau đó nhấn vào cơ sở dữ liệu? Thê nay đung không?

msg = Message.objects.bulk_create({ 
    Message (
     recipient_number=e.mobile, 
     content=batch.content, 
     sender=e.contact_owner, 
     billee=batch.user, 
     sender_name=batch.sender_name 
    ), 
}) 
+2

Bạn sắp hoàn tất. Không tạo các đối tượng trong vòng lặp. Chỉ cần làm 'Message (...)' thay vì 'Message.objects.create (...)' - Nó sẽ không kích hoạt một cuộc gọi cơ sở dữ liệu. Đặt danh sách đó vào danh sách và chuyển danh sách đó vào 'bulk_create' – karthikr

Trả lời

29

Mã thứ hai trong câu hỏi tạo một đối tượng duy nhất, vì nó vượt qua một tập hợp với đối tượng Thư.

Để tạo nhiều đối tượng, hãy chuyển nhiều đối tượng Tin nhắn tới bulk_create. Ví dụ:

objs = [ 
    Message(
     recipient_number=e.mobile, 
     content=batch.content, 
     sender=e.contact_owner, 
     billee=batch.user, 
     sender_name=batch.sender_name 
    ) 
    for e in q 
] 
msg = Message.objects.bulk_create(objs) 
+0

Nếu tôi có một triệu đối tượng thì sao? Điều này có quan trọng không? – GrantU

+0

Nếu bạn có khả năng xử lý để xử lý các đối tượng 1MM, thì chắc chắn – karthikr

+0

Nó là CPU hoặc Bộ nhớ không quan tâm? – GrantU

Các vấn đề liên quan