PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como escrevo uma consulta Django que faz matemática de data quando executada como PostGres SQL?


Você pode adicionar funções de banco de dados ao Django , para isso você pode adicionar uma função para a instrução INTERVAL em postgres
class IntervalSeconds(Func):

    function = 'INTERVAL'
    template = "(%(expressions)s * %(function)s '1 seconds')"

Você pode usar esta função em suas consultas para adicionar segundos a uma data e hora
YourModel.objects.annotate(
    attr=ExpressionWrapper(
        F("article__created_on") + IntervalSeconds(F("article__websitet__avg_time_in_seconds_to_reach_ep")),
        output_field=models.DateTimeField()
    ),
)

A saída do IntervalSeconds função é um intervalo Postgres de 1 segundo multiplicado pelo campo passado para ele. Isso pode ser adicionado e subtraído de um carimbo de data/hora. Você pode fazer um Interval genérico função que não leva apenas segundos, isso é um pouco mais complexo

O ExpressionWrapper é necessário para converter o resultado em um objeto de data e hora