特定的数据库访问查询优化

时间:2018-11-04 10:26:04

标签: python django python-3.x

In [14]: from accounts.models import CustomUser

In [15]: CustomUser.objects.filter()
Out[15]: <QuerySet [<CustomUser: nimish4july1998@gmail.com,Nimish,(9)>, <CustomUser: company1@gmail.com,Escale,(10)>, <CustomUser: adv1@gmail.com,advertiser1,(16)>, <CustomUser: adv2@gmail.com,,(17)>, <CustomUser: adv3@gmail.com,,(18)>, <CustomUser: adv4@gmail.com,,(19)>, <CustomUser: adv5@gmail.com,,(20)>, <CustomUser: ok@gmail.com,,(33)>, <CustomUser: pub_company1@gmail.com,,(34)>, <CustomUser: ,,(35)>, <CustomUser: employee1@gmail.com,,(40)>, <CustomUser: employeeno1@gmail.com,,(41)>, <CustomUser: adv500@gmail.com,,(42)>]>



In [17]: CustomUser.objects.using("company1")
Out[17]: <QuerySet [<CustomUser: nimish4july1998@gmail.com,Nimish,(9)>, <CustomUser: company1@gmail.com,Escale,(10)>, <CustomUser: adv1@gmail.com,advertiser1,(16)>, <CustomUser: adv2@gmail.com,,(17)>, <CustomUser: adv3@gmail.com,,(18)>, <CustomUser: adv4@gmail.com,,(19)>, <CustomUser: adv5@gmail.com,,(20)>, <CustomUser: ok@gmail.com,,(33)>, <CustomUser: pub_company1@gmail.com,,(34)>, <CustomUser: ,,(35)>, <CustomUser: employee1@gmail.com,,(40)>, <CustomUser: employeeno1@gmail.com,,(41)>, <CustomUser: adv500@gmail.com,,(42)>]>



In [18]: CustomUser.objects
Out[18]: <django.db.models.manager.Manager at 0x7ff0906fa1d0>

所以我的问题是,当我们想在使用函数using()时立即使用特定的数据库时,我们会看到整个查询集;另一方面,通常像CustomUser.objects一样使用它,除非我们应用过滤器,否则它不会返回查询集

这是否意味着对于一个特定的数据库,我们能够看到整个查询集,然后我们必须应用过滤器就不能使查询快速进行。实际上,我感到困惑的是,如果其中没有相同的记录,那会有什么区别“默认数据库”和“ company1 db”以及完全相同的数据, 一个查询会比第二个查询快吗?

1 个答案:

答案 0 :(得分:2)

没有,这里没有区别。 using返回一个查询集,就像all一样。您可以对它们中的任何一个进行过滤,而无需执行查询,直到您对其进行迭代。