python - 使用 Django (queryset) - postgres 计算一年中期间的天数

标签 python django postgresql django-queryset

我想弄清楚如何计算数据库中一年中的总期间数。例如,计算一年中的总叶子数。

我正在使用:

Django - 1.11.7
Postgres - 9.4

这是我的模型.py:

class Leave(models.Model):
    leavedatefrom = models.DateField()
    leavedateto = models.DateField()

一个例子来说明这个问题:

leaves taken in 1 year (01/01/2019 - 31/12/2019)

record 1: (leavedatefrom)01/02/2019 - (leavedateto)05/02/2019 ===> 5 days
record 2: (leavedatefrom)10/05/2019 - (leavedateto)12/05/2019 ===> 3 days

Total days = 5 + 3 = 8 days

如何在 Django 中计算一年中数据库中的周期天数?基本上我想在上面的例子中得到 8 天。

最佳答案

我想我有点晚了。您可以在单个 SQL 查询中获得天数总和

from django.db.models import F, IntegerField, ExpressionWrapper, Sum

Leave.objects.filter(...).annotate(
    diff_date_in_integer=ExpressionWrapper(F('leavedateto') - F('leavedatefrom'), output_field=IntegerField())
).annotate(
    diff_date_in_days=ExpressionWrapper(F('diff_date_in_integer') / (1000000 * 60 * 60 * 24), output_field=IntegerField())).aggregate(
    sum=Sum('diff_date_in_days'))

filter(...) 子句,可以加上datetime等过滤条件或者 user specific data


描述

  1. 注释 leavedateto之间的区别 leavedatefrom “整数” 格式(在 diff_date_in_integer 带注释的字段中)
  2. 转换了 diff_date_in_integer 数据到 days
  3. 使用 aggregate() 功能和 Sum() DB函数,我们发现了总天数。

关于python - 使用 Django (queryset) - postgres 计算一年中期间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231534/

相关文章:

python - 在PythonAnywhere上使用Gevent或Tornado部署Flask

python - 从 Python 结构构建 XML

c# - Visual Studio 2017 中不受支持的 python 项目

python - Django:如何实例化表单集中的所有表单?

python - 通过 Django REST Framework 中的多个参数反向 URL

javascript - django - 无法将选定的标签传递到js(ajax代码)

sql - 如何检查一个表是否为空,如果是,则检查另一个表?

python - 将整数列表转换为整数python

sql - postgresql 更新列从选择

ruby-on-rails - Errno::ECONNREFUSED 由于目标机器主动拒绝,无法建立连接。 - 在 Rails 应用程序中使用 connect(2) 进行 Mongodb 搜索