2009-06-01 2 views
2

그냥가 난 단지 장고 ORM으로이 SQL 쿼리를 사용하여 얻을 수있는 결과를 얻을 수 있습니다 궁금 :장고 - ORM 질문

SELECT * FROM (SELECT DATE_FORMAT(created, "%Y") as dte, sum(1) FROM some_table GROUP BY dte) as analytics; 

그 결과입니다 :

+------+--------+ 
| dte | sum(1) | 
+------+--------+ 
| 2006 |  20 | 
| 2007 | 2230 | 
| 2008 | 4929 | 
| 2009 | 1177 | 
+------+--------+ 

단순화를 모델은 다음과 같습니다 : 나는 .extra의 혼합을 사용하여 다양한 방법을 시도했습니다

# some/models.py 

class Table(models.Model): 
    created = models.DateTimeField(default=datetime.datetime.now) 

및 .values ​​() 또한을 사용하여 (=를 {} 선택) .query.group_by 트릭 설명 here하지만 문제에 신선한 눈을 감사하겠습니다.

답변

3

장고 1.1 (이 게시시 트렁크)이 당신이 등 counts, mins, sums, averages, 쿼리에서 수행 할 수 있도록, aggregates 있습니다.

아마도 당신은 아마도 여러 개의 쿼리 세트를 사용하여 수행하려고합니다. 테이블의 각 행 (생성 된 결과 테이블조차도)은 새로운 객체로 간주됩니다. 당신은 정말 당신이 내가 그것을 dollars을 고려합니다 합산하는지 설명하지 않습니다

book_years = Books.object.all().order_by('year').distinct() 

# I use a list comprehension to filter out just the years 
for year in [book_year.created.year for book_year in book_years]: 
    sum_for_year = Book.objects.filter(created__year=year).aggregate(Sum(sales)) 
+0

Django가 최신 버전에서 가지고있는 집계 기능을 잘 알고 있습니다. 내가 제공 한 원시 SQL이하는 것과 같은 쿼리를 만들려고 할 수 있습니까? :) –

2

장고 당신이 ORM을 통해 표현하지 않는 쿼리를 필요로 할 때, 당신은 항상 use raw SQL 수 있습니다.

당신의 즉각적인 목적을 위해 표현에 의한 그룹화 (그리고 그룹에 대한 집계 계산)가 장고의 현재 기능을 넘어선다고 생각합니다.

+0

예 원시 SQL을 처리 할 수 ​​있다는 것을 잘 알고 있습니다. ORM 자체의 현재 기능으로 문제를 해결할 수 있습니까? –

+0

달리 배우고 싶지만 지금은 대답이 '아니오'라고 생각합니다. –

관련 문제