PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a scrivere una query Django che esegue la matematica della data quando viene eseguita come PostGres SQL?

Puoi aggiungere funzioni di database a Django , per questo puoi aggiungere una funzione per l'istruzione INTERVAL in postgres

class IntervalSeconds(Func):

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

Puoi quindi utilizzare questa funzione nelle tue query per aggiungere secondi a un datetime

YourModel.objects.annotate(
    attr=ExpressionWrapper(
        F("article__created_on") + IntervalSeconds(F("article__websitet__avg_time_in_seconds_to_reach_ep")),
        output_field=models.DateTimeField()
    ),
)

L'output di IntervalSeconds la funzione è un intervallo Postgres moltiplicato per il campo che gli è passato. Questo può essere aggiunto e sottratto da un timestamp. Potresti creare un Interval generico funzione che non richiede solo pochi secondi, questo è un po' più complesso

Il ExpressionWrapper è necessario per convertire il risultato in un oggetto datetime