【问题标题】:how to pull value from queryset by going to database once django如何通过一次 django 访问数据库从查询集中提取值
【发布时间】:2014-04-24 23:43:02
【问题描述】:

我有一个为另一种方法设置数据的函数。它这样做是为了限制对数据库的调用。

设置方法如下:

def get_customers(request):
    customer_list = Customer.objects.filter(pk=request.user)

    populated_customer = get_customer(request, customer_list)

进行处理的方法如下所示:

def get_customer(request):
    for customer in customer_list:
         if customer.id == 3:
              # do something with this customer

我要处理数百万条记录,而不是执行 for 循环来查找我需要的客户,而是如何在不进入数据库的情况下将其从列表中拉出。

【问题讨论】:

  • 如果根据get_customer 视图,您只需要一个客户,为什么需要保留customer_list - 为什么不只通过数据库中的主键过滤客户?此外,您可以开始在 memcached 或 redis 等 key:value 存储中缓存客户。

标签: python django django-queryset django-orm


【解决方案1】:

看来您在这里所做的是将所有用户记录拉入 python (django) 内存,然后通过循环通过此 QuerySet 将它们过滤掉。

更好的方法可能是将这些查询链接到您的数据库,这由 django QuerySet 语言支持。

查看有关chained filter methods 的文档是明智的,但示例查询可能如下所示:

customer_list = Customer.objects.filter(pk=request.user).filter(id=3)

As shown here,这和下面的不一样:

customer_list = Customer.objects.filter(pk=request.user,id=3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多