Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Django 如何防止数据库搜索旧对象?_Django_Database_Postgresql_Django Rest Framework_Django Queryset - Fatal编程技术网

Django 如何防止数据库搜索旧对象?

Django 如何防止数据库搜索旧对象?,django,database,postgresql,django-rest-framework,django-queryset,Django,Database,Postgresql,Django Rest Framework,Django Queryset,我有一个Django应用程序,它使用Postgresql作为数据库。我存储了一些具有datetime字段的对象。在我的查询中,我通常希望获取存储在上一天或上一周的对象,因此较旧的对象对我来说并不重要 我无法删除较旧的对象,因为有时我想获取所有数据 我想优化应用程序。 有没有办法只搜索最后一天存储的数据而不搜索其他数据 编辑: 想象一下,有这么多记录,比如说100万条,而今天只有一小部分记录。如果使用Model.objects.filter(datetime\u field\uu gte=last

我有一个Django应用程序,它使用Postgresql作为数据库。我存储了一些具有datetime字段的对象。在我的查询中,我通常希望获取存储在上一天或上一周的对象,因此较旧的对象对我来说并不重要

我无法删除较旧的对象,因为有时我想获取所有数据

我想优化应用程序。 有没有办法只搜索最后一天存储的数据而不搜索其他数据

编辑:


想象一下,有这么多记录,比如说100万条,而今天只有一小部分记录。如果使用
Model.objects.filter(datetime\u field\uu gte=last\u week)
,数据库是否检查所有记录?

您可以在datetime字段上查询筛选

import datetime


last_week = datetime.date.today() - datetime.timedelta(days=7)
Model.objects.filter(datetime_field__gte=last_week)

确保检查文档,并且可以在DateTime字段上查询筛选

import datetime


last_week = datetime.date.today() - datetime.timedelta(days=7)
Model.objects.filter(datetime_field__gte=last_week)

确保检查文档并创建一个新的输入查询2,例如

def SearchW(request):
    serchedWl = Modal.objects.all()
    query1= request.GET.get('query1') #main query
    query2= request.GET.get('query2') #last week
    if query1:
        serchedWl =serchedWl.filter(Q(field__contains=query1))
    if query2:
        serchedWl =serchedWl.filter(Q(datetime_field__contains=query2))
    context={
        'title':'your page',
        'serchedWl': serchedWl, 
    }
    return render(request,'to your page .html',context)

不要忘记标记是serchedWl,例如创建一个新的输入查询2

def SearchW(request):
    serchedWl = Modal.objects.all()
    query1= request.GET.get('query1') #main query
    query2= request.GET.get('query2') #last week
    if query1:
        serchedWl =serchedWl.filter(Q(field__contains=query1))
    if query2:
        serchedWl =serchedWl.filter(Q(datetime_field__contains=query2))
    context={
        'title':'your page',
        'serchedWl': serchedWl, 
    }
    return render(request,'to your page .html',context)

不要忘记标签是serchedWl

如果数据库中有20000条记录,比如说其中1000条是今天的记录,这个方法会检查所有20000条记录吗?是的,Postgres必须检查每一行。您希望它如何在不检查列的情况下知道列是否满足您的条件。您可以在日期列上创建一个索引,然后它可能只需要检查索引,但表和索引之间的比例为1:1。(事实并非如此。你可以完成创建每日分区并在查询中指定该分区的艰巨任务,但这否定了查询未知日期范围的能力。)@AK12作为上述保护者(他是对的),Postgres将检查所有卷。如Belayer所述,您可以通过向DateTime添加索引来加快查询速度,但查询将贯穿您的所有数据。例如,如果数据库中有20000条记录,并假设其中1000条是今天的记录,此方法是否检查所有20000条记录?是的,Postgres必须检查每一行。您希望它如何在不检查列的情况下知道列是否满足您的条件。您可以在日期列上创建一个索引,然后它可能只需要检查索引,但表和索引之间的比例为1:1。(事实并非如此。你可以完成创建每日分区并在查询中指定该分区的艰巨任务,但这否定了查询未知日期范围的能力。)@AK12作为上述保护者(他是对的),Postgres将检查所有卷。如Belayer所述,您可以通过向DateTime添加索引来加快查询速度,但查询将贯穿您的所有数据。