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

Betinget update_or_create med django

Følgende eksempler fungerer muligvis korrekt

Første mulighed

try:
    obj = Room.objects.get(
        id=id, # test with other fields if you want
    )
    if obj.modified_at < DATETIME:
        obj.capacity = 10
        obj.save()
    else:
        obj = Room.objects.create(
            # fields attributes
        )
except Room.DoesNotExist:
    obj = Room.objects.create(
        # fields attributes
    )

Anden mulighed

eller du kan gøre det med Betinget udtryk af django

from django.db.models import F, Case, When
import datetime

your_date = datetime.datetime.now()
condition = Case(When(modified_at__lt=your_date,then=10),default=F('capacity'))
  • Vi kontrollerer, om modified_at er mindre end your_date
  • så er værdien af ​​denne betingelse 10,
  • ellers beholder vi den samme værdi af feltet med F('capacity')

resten af ​​koden

Room.objects.update_or_create(name='new_name',
           defaults={'name':'new_name','capacity':conditition})



  1. ORA-28040:Ingen matchende godkendelsesprotokol undtagelse

  2. Vi introducerer MariaDB Platform X5:databasen for enhver arbejdsbelastning, nu i enhver skala

  3. Dynamisk 'LIKE'-erklæring i SQL (Oracle)

  4. Problem med vinduesfunktion i SQL Server 2008 R2