1

私はこれを見つけましたが、次のようなものが必要です

select count(*) as my_count from my_table;

Djangoで可能ですか?

ありがとう。

4

2 に答える 2

1

たとえば、「Book」オブジェクトが .count() メソッドをキャストするだけの場合:

Book.objects.count()
于 2013-05-11T16:17:23.883 に答える
1

集計を行いたいとします。Django ORM はそれを行うことができます。ここにドキュメントがあります。

つまり、いくつかのカウントを集計して、それをクエリで使用できます。ドキュメントの例:

class Author(models.Model):
   name = models.CharField(max_length=100)
   age = models.IntegerField()

class Publisher(models.Model):
   name = models.CharField(max_length=300)
   num_awards = models.IntegerField()

class Book(models.Model):
   name = models.CharField(max_length=300)
   pages = models.IntegerField()
   price = models.DecimalField(max_digits=10, decimal_places=2)
   rating = models.FloatField()
   authors = models.ManyToManyField(Author)
   publisher = models.ForeignKey(Publisher)
   pubdate = models.DateField()

class Store(models.Model):
   name = models.CharField(max_length=300)
   books = models.ManyToManyField(Book)
   registered_users = models.PositiveIntegerField()

これを行うと、次のようになります。

>>> from django.db.models import Count
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
>>> pubs

SQL クエリは次のようになります。

SELECT "main_publisher"."id", "main_publisher"."name", "main_publisher"."num_awards", COUNT("main_book"."id") AS "num_books" FROM "main_publisher"LEFT OUTER JOIN "main_book" ON ("main_publisher"."id" = "main_book"."publisher_id") GROUP BY "main_publisher"."id", "main_publisher"."name", "main_publisher"."num_awards" LIMIT 21; args=()

また、フィルタリングで集計データを使用できます。

>>> pubs = Publisher.objects.annotate(num_books=Count('book')).filter(num_books=2)
>>> pubs

SELECT "main_publisher"."id", "main_publisher"."name", "main_publisher"."num_awards", COUNT("main_book"."id") AS "num_books" FROM "main_publisher"LEFT OUTER JOIN "main_book" ON ("main_publisher"."id" = "main_book"."publisher_id") GROUP BY "main_publisher"."id", "main_publisher"."name", "main_publisher"."num_awards" HAVING COUNT("main_book"."id") = 2  LIMIT 21; args=(2,)
于 2013-05-11T16:40:23.567 に答える