有什么方法可以清除django.db.connection.queries吗?

yrefmtwq  于 2022-12-27  发布在  Go
关注(0)|答案(2)|浏览(110)

我想监控我的系统(用Django models构建)中的查询时间。
最后,我找到了django.db.connection.queries
它显示了所有的查询和所花费的时间。
使用这个,我想打印的清单,我已经做了定期查询,然后我想清除我打印后打印的清单。
它似乎有列表对象的方法(pop, remove等)。
但是即使我调用pop(),它也没有任何效果,仍然显示相同的长度。
如何清除列表..?
或者有没有其他方法来表达我的意图?
我还找到了Django-debug-toolbar,但似乎只是查看部分。

lrpiutwd

lrpiutwd1#

您可以从django.db模块调用reset_queries()

from django.db import reset_queries
reset_queries()
vwkv1x7d

vwkv1x7d2#

您可以使用**reset_queries()清除connection.queries
例如,如果将
reset_queries()放在Person.objects.select_for_update()**之后,如下所示:

# "store/views.py"

from django.db import transaction
from .models import Person
from django.db import reset_queries
from django.db import connection
from django.http import HttpResponse

@transaction.atomic
def test(request):
    Person.objects.create(name="John") # INSERT
    
    qs = Person.objects.select_for_update().get(name="John") # SELECT FOR UPDATE
    reset_queries() # Here
    qs.name = "Tom"
    qs.save() # UPDATE
    qs.delete() # DELETE
                 
    for query in connection.queries: # Here
        print(query)

    return HttpResponse("Test")

您只能获得**UPDATEDELETE查询**,而不能获得**INSERTSELECT FOR UPDATE查询**,如下所示:

{'sql': 'UPDATE "store_person" SET "name" = \'Tom\' WHERE "store_person"."id" = 190', 'time': '0.000'}
{'sql': 'DELETE FROM "store_person" WHERE "store_person"."id" IN (190)', 'time': '0.000'}
[24/Dec/2022 07:00:01] "GET /store/test/ HTTP/1.1" 200 9

相关问题