gpt4 book ai didi

python - postgresql django 中的近似行数

转载 作者:行者123 更新时间:2023-11-29 14:30:17 25 4
gpt4 key购买 nike

我有一个与 django 连接的 postgresql 数据库。在数据库中有很多大表,我想要它们的行数。由于表很大,这需要花费大量时间来执行。

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

最佳答案

我建议为这个名为 django-postgres-fuzzycount [GitHub] 的应用程序使用专用包.这个包提供了一个管理器来进行快速计数。

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

$ pip install django-postgres-fuzzycount

然后您可以将FuzzyCountManager 添加到您想要获得近似计数的模型中:

from django.db import models
from fuzzycount import <b>FuzzyCountManager</b>

class SomeModel(models.Model):

# ... (some fields) ...

objects = models.Manager()
<b>approx</b> = FuzzyCountManager()

然后您可以使用以下方法进行近似计数:

SomeModel.approx.count()

如果您.filter(..),Django 将计算真实 数,因为pg_class 表仅存储近似数整个表的行数,所以:

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

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

您也可以直接“修补”objects 管理器,但是获取真实记录数可能会更难:

from django.db import models
from fuzzycount import FuzzyCountManager

class SomeModel(models.Model):

# ... (some fields) ...

<b>objects</b> = FuzzyCountManager()

同样不错的是,如果您将后端数据库更改为另一个数据库,FuzzyCountManager(..) 将充当普通 Manager,因此如果您以后更改数据库系统,则不必重写管理器。

关于python - postgresql django 中的近似行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com