sql >> Database >  >> RDS >> PostgreSQL

Hoe schrijf ik een Django-query die datumberekeningen uitvoert wanneer deze wordt uitgevoerd als PostGres SQL?

U kunt databasefuncties toevoegen aan Django , hiervoor kun je een functie toevoegen voor de INTERVAL-statement in postgres

class IntervalSeconds(Func):

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

U kunt deze functie vervolgens in uw zoekopdrachten gebruiken om seconden toe te voegen aan een 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()
    ),
)

De uitvoer van de IntervalSeconds functie is een Postgres-interval van 1 seconde vermenigvuldigd met het veld dat eraan is doorgegeven. Dit kan worden opgeteld en afgetrokken van een tijdstempel. Je zou een generiek Interval . kunnen maken functie die niet slechts enkele seconden duurt, deze is iets complexer

De ExpressionWrapper is vereist om het resultaat te converteren naar een datetime-object




  1. Emoji-tekens opslaan in MySQL-database

  2. Een-op-veel relaties in (Postgre)SQL

  3. Amazon RDS (MySQL of MariaDB) migreren naar een On-Prem Server

  4. SQLSTATE[HY093]:Ongeldig parameternummer