PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie schreibe ich eine Django-Abfrage, die Datumsberechnungen durchführt, wenn sie als PostGres-SQL ausgeführt wird?

Sie können Datenbankfunktionen zu Django hinzufügen , dafür können Sie eine Funktion für die INTERVAL-Anweisung hinzufügen in postgres

class IntervalSeconds(Func):

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

Sie können diese Funktion dann in Ihren Abfragen verwenden, um Sekunden zu einer Datumszeit hinzuzufügen

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

Die Ausgabe von IntervalSeconds Funktion ist ein Postgres-Intervall von 1 Sekunde multipliziert mit dem übergebenen Feld. Dieser kann zu einem Zeitstempel addiert und subtrahiert werden. Sie könnten ein generisches Interval erstellen Funktion, die nicht nur Sekunden dauert, sondern etwas komplexer ist

Der ExpressionWrapper wird benötigt, um das Ergebnis in ein datetime-Objekt umzuwandeln