PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment écrire une requête Django qui effectue des calculs de date lorsqu'elle est exécutée en tant que SQL PostGres ?

Vous pouvez ajouter des des fonctions de base de données à Django , pour cela, vous pouvez ajouter une fonction pour la instruction INTERVAL dans postgres

class IntervalSeconds(Func):

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

Vous pouvez ensuite utiliser cette fonction dans vos requêtes pour ajouter des secondes à une date/heure

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

La sortie de IntervalSeconds la fonction est un intervalle Postgres d'une seconde multiplié par le champ qui lui est transmis. Cela peut être ajouté et soustrait d'un horodatage. Vous pouvez créer un Interval générique fonction qui ne prend pas que quelques secondes, c'est un peu plus complexe

Le ExpressionWrapper est nécessaire pour convertir le résultat en un objet datetime