Python postgresql django中的大致行数
我有一个与django连接的postgresql数据库。在数据库中有很多大表,我需要它们的行数。由于表的大小很大,执行此操作需要很多时间Python postgresql django中的大致行数,python,django,database,postgresql,database-table,Python,Django,Database,Postgresql,Database Table,我有一个与django连接的postgresql数据库。在数据库中有很多大表,我需要它们的行数。由于表的大小很大,执行此操作需要很多时间 我发现可以从pg\u类中检索近似计数。在Django中有没有办法做到这一点而不执行原始查询 我建议为这个名为。这个包提供了一个管理器,可以进行快速计数 您可以使用pip安装软件包(例如在您的本地环境中): 然后,您可以将FuzzyCountManager添加到要获得近似计数的模型中: from django.db import models from fuzz
我发现可以从
pg\u类
中检索近似计数。在Django中有没有办法做到这一点而不执行原始查询 我建议为这个名为。这个包提供了一个管理器,可以进行快速计数
您可以使用pip
安装软件包(例如在您的本地环境中):
然后,您可以将FuzzyCountManager
添加到要获得近似计数的模型中:
from django.db import models
from fuzzycount import FuzzyCountManager
class SomeModel(models.Model):
# ... (some fields) ...
objects = models.Manager()
approx = FuzzyCountManager()
如果您使用.filter(..)
,Django将计算实数,因为pg_class
表只存储整个表的大约行数,因此:
SomeModel.approx.filter(foo=bar).count()
将需要更多的时间(取决于索引等)
您也可以直接“修补”对象
管理器,但获取实际记录数可能会更困难:
from django.db import models
from fuzzycount import FuzzyCountManager
class SomeModel(models.Model):
# ... (some fields) ...
objects = FuzzyCountManager()
来自django.db导入模型的
从fuzzycount导入FuzzyCountManager
类模型(models.Model):
# ... (一些领域)。。。
objects=FuzzyCountManager()
如果您将后端数据库更改为另一个数据库,则
FuzzyCountManager(..)
将充当正常的管理器,因此,如果您以后更改数据库系统,您不必重写管理器。我建议为这个命名的数据库使用专用的包。这个包提供了一个管理器,可以进行快速计数
您可以使用pip
安装软件包(例如在您的本地环境中):
然后,您可以将FuzzyCountManager
添加到要获得近似计数的模型中:
from django.db import models
from fuzzycount import FuzzyCountManager
class SomeModel(models.Model):
# ... (some fields) ...
objects = models.Manager()
approx = FuzzyCountManager()
如果您使用.filter(..)
,Django将计算实数,因为pg_class
表只存储整个表的大约行数,因此:
SomeModel.approx.filter(foo=bar).count()
将需要更多的时间(取决于索引等)
您也可以直接“修补”对象
管理器,但获取实际记录数可能会更困难:
from django.db import models
from fuzzycount import FuzzyCountManager
class SomeModel(models.Model):
# ... (some fields) ...
objects = FuzzyCountManager()
来自django.db导入模型的
从fuzzycount导入FuzzyCountManager
类模型(models.Model):
# ... (一些领域)。。。
objects=FuzzyCountManager()
如果您将后端数据库更改为另一个数据库,则FuzzyCountManager(..)
将充当正常的管理器
,以防以后更改数据库系统,您不必重写管理器。您可以使用FuzzyCountManager
:您可以使用FuzzyCountManager
:我不想直接“修补”对象,因为已经添加了自定义管理器approx=FuzzyCountManager()
但出现错误:AttributeError:“QuerySet”对象没有属性“approw”
@Miguel:您可能正在使用SomeModel.objects.approw
,但它是一个QuerySet
,因此无法工作。请注意,.objects
仅在模型上定义,而不是在由该模型产生的管理器或QuerySet
上定义。@Miguel:不过,您只需在模型中创建一个管理器approx=FuzzyCountManager()
,以及另一个ojbects=models.manager()
,因此,您可以使用SomeModel.approx
来大致计算元素的数量。好的,谢谢。但是queryset伯爵呢?这就是我需要的。@Miguel:你可以用SomeModel.objects.count()
精确计数,或者用SomeModel.About.count()
近似计数,如果你用第一种方法(第二个代码片段)实现的话。我不想直接“修补”对象,因为已经有了一个自定义的管理器,添加了About=FuzzyCountManager()
但出现错误:AttributeError:“QuerySet”对象没有属性“approw”
@Miguel:您可能正在使用SomeModel.objects.approw
,但它是一个QuerySet
,因此无法工作。请注意,.objects
仅在模型上定义,而不是在由该模型产生的管理器或QuerySet
上定义。@Miguel:不过,您只需在模型中创建一个管理器approx=FuzzyCountManager()
,以及另一个ojbects=models.manager()
,因此,您可以使用SomeModel.approx
来大致计算元素的数量。好的,谢谢。但是queryset伯爵呢?这就是我所需要的。@Miguel:你可以用SomeModel.objects.count()
精确计数,或者用SomeModel.About.count()
近似计数,如果你用第一种方法(第二个代码片段)实现的话。