Django-如何检查django是否正在针对某些查询击中数据库

问题描述

我想优化django应用程序,为此我想知道如何检查查询是否命中数据库或从缓存版本中获取结果/返回值?

例如:

products = Products.objects.filter(product_name__icontains="natural")

if not products.exist():
    return Response(...)

total_products = products.count()
first_product = product.first()

我喜欢在shell中执行此操作,并想检查哪一行命中数据库,哪一行刚刚从缓存版本返回结果,以便可以在视图中编写优化的查询

我了解django-toolbar,但是我找不到它是否支持这样的功能(某些行匹配数据库或结果来自缓存版本)。

问候。

解决方法

以这种方式检查 connection.queries 的长度

from django.conf import settings
settings.DEBUG = True
from django.db import connection
print(len(connection.queries))

# do something with the database
products = Products.objects.filter(product_name__icontains="natural")
print(len(connection.queries))

# and execute the print statement again and again
total_products = products.count()
print(len(connection.queries))


first_product = product.first()
print(len(connection.queries))

参考:

  1. Get SQL query count during a Django shell session