Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django查询中的分组依据_Python_Mysql_Django_Django Models - Fatal编程技术网

Python Django查询中的分组依据

Python Django查询中的分组依据,python,mysql,django,django-models,Python,Mysql,Django,Django Models,亲爱的StackOverFlow社区: 我需要您的帮助来执行下面的SQL查询 select DATE(creation_date), COUNT(creation_date) from blog_article WHERE creation_date BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE() GROUP BY DATE(creation_date) AND author="scott_tiger"; 这是我的Django模型 class

亲爱的StackOverFlow社区:

我需要您的帮助来执行下面的SQL查询

select DATE(creation_date), COUNT(creation_date) from blog_article WHERE creation_date BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE() GROUP BY DATE(creation_date) AND author="scott_tiger";
这是我的Django模型

class Article(models.Model):
    title = models.CharField(...)
    author = models.CharField(...)
    creation_date = models.DateField(...)
如何使用aggregate()和annotate()函数形成上述Django查询。我创造了这样的东西-

now = datetime.datetime.now()
date_diff = datetime.datetime.now() + datetime.timedelta(-30)
records = Article.objects.values('creation_date', Count('creation_date')).aggregate(Count('creation_date')).filter(author='scott_tiger', created_at__gt=date_diff, created_at__lte=now)
当我运行此查询时,会出现以下错误-

'Count' object has no attribute 'split'
知道该由谁使用吗?

从值中删除计数(“创建日期”),并在过滤器后添加注释(计数(“创建日期”)。

试试看

records = Article.objects.filter(author='scott_tiger', created_at__gt=date_diff, 
    created_at__lte=now).values('creation_date').aggregate(
    ccd=Count('creation_date')).values('creation_date', 'ccd')
您需要使用
creation\u date\u count
或自定义名称(
ccd
此处)在
aggregate()之后引用计数结果列


另外,
values()
before
aggregate
limits
groupby
columns和last
value()
声明要
select
ed的列。不需要按照已经基于行组的
COUNT
进行分组。

为什么要进行计数(“创建日期”)?SQL计数实际上并不适用于结果集中的列,但它可以,而且可能更易于阅读,可以显式地说明作者想要计数的内容。