2016-11-24 5 views
2

정기적으로 수천 명의 고객을 대상으로 청구서를 실행하는 장고 시스템을 보유하고 있습니다. 여기 내 모델입니다 :와 송장의관련 개체로 장고`bulk_create '

청구가 실행
class Invoice(models.Model): 
    balance = models.DecimalField(
     max_digits=6, 
     decimal_places=2, 
    ) 

class Transaction(models.Model): 
    amount = models.DecimalField(
     max_digits=6, 
     decimal_places=2, 
    ) 
    invoice = models.ForeignKey(
     Invoice, 
     on_delete=models.CASCADE, 
     related_name='invoices', 
     null=False 
    ) 

, 수천 작성된 각 레코드의 삽입을 트리거 여러 중첩 for 루프를 사용하여 만든 각 거래의 수십. 각각의 개별 송장에 대해 bulk_create() 트랜잭션을 실행할 수 있지만 여전히 수천 회를 호출하여 bulk_create()을 호출합니다.

관계가 유지되고 데이터베이스가 가능한 가장 효율적인 방법으로 사용되도록 수천 개의 관련 모델을 대량 작성하는 방법은 무엇입니까?

주 :

  • 내가 (SQLite는의 가능한 제외) 모든 데이터베이스에 일하는 것이 기본 장고 솔루션을 찾고 있어요.
  • 내 시스템은 장기 실행 코드와 활성 요청을 분리하기 위해 셀러리 작업에서 청구서를 실행하지만 청구주기를 완료하는 데 소요되는 시간과 관련이 있습니다.
  • 솔루션은 다른 요청이나 실행중인 작업이 해당 테이블에서 읽고 쓰고 있다고 가정해야합니다. 그들은 모두 ID를 가지고, 모든 송장에 대한 Transaction 객체를 생성하고 또한 bulk_create로 저장할 수 있도록

답변

2

당신은 bulk_create 모든 Invoice 객체는 DB를 그들을 새로 고칠 수 있습니다. 이 모든 작업은 단일 transaction.atomic 컨텍스트 내에서 수행 할 수 있습니다.

또한 django 1.10 및 postrgres의 경우 특별히 answer을 참조하십시오.