在获取包含关系的模型时,如何知道Django是否正在运行多个查询?
以下是一个例子:
class ModelOne(models.Model):
'''...the stuff...'''
class ModelTwo(models.Model):
something = models.ForeignKeyField(ModelOne)
'''...all the things...'''
class ModelThree(models.Model):
something_elses = model.ManyToManyField(ModelTwo)
class ModelFour(models.Model):
now_this_is_just_silly = models.ManyToManyField(ModelThree)
让我们说我像这样获取ModelFour:
m = ModelFour.objects.all()[0]
如果认为默认情况下所有子模型一直到ModelOne
都是其数据结构的一部分,那将是非常棒的。是这样的吗?
如果我开始向下导航ModelFour的数据结构以访问ModelOne中的属性(东西),我是否会执行多个查询?
根据django的建议,这是一个postgres数据库设置。
答案 0 :(得分:1)
您可以查看postgres的查询计数,并在查询完成后再次检查
使用此查询读取所有数据库中执行的事务总数:
SELECT sum(xact_commit+xact_rollback) FROM pg_stat_database;
如果您只想为一个数据库使用相同的计数器,请使用:
SELECT xact_commit+xact_rollback FROM pg_stat_database WHERE datname = 'mydb';
信用到:https://dba.stackexchange.com/questions/35940/how-many-queries-per-second-is-my-postgres-executing
您可以使用以下命令列出当前正在运行的查询:
SELECT datname,procpid,current_query FROM pg_stat_activity
来自:http://chrismiles.info/systemsadmin/databases/articles/viewing-current-postgresql-queries/
答案 1 :(得分:1)
要计算n个查询,请尝试使用connection from django.db(在settings.py中确保DEBUG=True
):
from django.db import connection
m = ModelFour.objects.all()[0]
print len(connection.queries)
...如果您只想查看列表中的查询,请删除len