Ani*_*war 8 django django-models django-queryset
我想从django查询中提取一些特定的列
models.py
class table
id = models.IntegerField(primaryKey= True)
date = models.DatetimeField()
address = models.CharField(max_length=50)
city = models.CharField(max_length=20)
cityid = models.IntegerField(20)
Run Code Online (Sandbox Code Playgroud)
这是我目前用于查询的内容
obj = table.objects.filter(date__range(start,end)).values('id','date','address','city','date').annotate(count= Count('cityid')).order_by('date','-count')
Run Code Online (Sandbox Code Playgroud)
我希望有一个类似于此的SQL查询
select DATE(date), id,address,city, COUNT(cityid) as count from table where date between "start" and "end" group by DATE(date), address,id, city order by DATE(date) ASC,count DESC;
Run Code Online (Sandbox Code Playgroud)
Eug*_*mov 17
至少在Django 1.10.5中,你可以使用这样的东西,没有extra和RawSQL:
from django.db.models.functions import Cast
from django.db.models.fields import DateField
table.objects.annotate(date_only=Cast('date', DateField()))
Run Code Online (Sandbox Code Playgroud)
对于过滤,您可以使用date查找(https://docs.djangoproject.com/en/1.11/ref/models/querysets/#date):
table.objects.filter(date__date__range=(start, end))
Run Code Online (Sandbox Code Playgroud)
对于以下情况.
select DATE(date), id,address,city, COUNT(cityid) as count from table where date between "start" and "end" group by DATE(date), address,id, city order by DATE(date) ASC,count DESC;
Run Code Online (Sandbox Code Playgroud)
您可以使用额外的地方来实现数据库功能.
Table.objects.filter(date__range(start,end)).extra(select={'date':'DATE(date)','count':'COUNT(cityid)'}).values('date','id','address_city').order_by('date')
Run Code Online (Sandbox Code Playgroud)
希望它会对你有所帮助.
谢谢.
| 归档时间: |
|
| 查看次数: |
9074 次 |
| 最近记录: |