PostgreSQL Django中的大约行数

时间:2018-10-20 11:10:13

标签: python django database postgresql database-table

我有一个与Django连接的PostgreSQL数据库。在数据库中,有很多大表我想要它们的行数。由于表的大小很大,因此需要花费很多时间来执行。

我发现可以从pg_class中检索近似计数。有什么办法可以在Django中执行而不执行原始查询吗?

1 个答案:

答案 0 :(得分:1)

我建议为此使用专用的软件包django-postgres-fuzzycount [GitHub]。该软件包提供了一个可以进行快速计数的管理器。

您可以使用pip安装软件包(例如,在您的本地环境中):

$ pip install django-postgres-fuzzycount

然后,您可以将``添加到要获取近似计数的模型中:

from django.db import models
from fuzzycount import FuzzyCountManager

class SomeModel(models.Model):

    #  ... (some fields) ...

    objects = models.Manager()
    approx = FuzzyCountManager()

然后您可以近似地算出:

SomeModel.approx.count()

如果您.filter(..),则Django将计算 real 数,因为pg_class表仅存储整个 的行数>表格,因此:

SomeModel.approx.filter(foo=bar).count()

将花费更多时间(取决于索引等)。

您也可以直接“修补” objects管理器,但是要获得 real 条记录可能会更困难:

from django.db import models
from fuzzycount import FuzzyCountManager

class SomeModel(models.Model):

    #  ... (some fields) ...

    objects = FuzzyCountManager()

如果将后端数据库更改为另一个数据库,则FuzzyCountManager(..)将充当 normal Manager,这也很好,因此,以后您更改数据库时系统,您不必重写管理器。