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

Django ORM sammenligne tupler / leksikografisk rækkefølge

Nedenfor er en måde, der fungerer i Django før 3.2, ved at bruge annotate (som også desværre har brug for det lille hack ved at indstille et output_field , selvom værdien ikke bruges).

from django.db.models import F, Func, TextField

col_a_col_b = Func(F('col_a'), F('col_b'), function='ROW', output_type=TextField())
col_a_col_b_from = Func(col_a_value, col_b_value, function='ROW')

filtered_queryset = queryset \
    .annotate(col_a_col_b=col_a_col_b) \
    .filter(col_a_col_b__gt=col_a_col_b_from) \
    .order_by('col_a', 'col_b')

I Django 3.2+ kan du tilsyneladende bruge alias i stedet for annotate

Dette virker, da det, der omtales som en tuple, faktisk er en forkortelse for en Rækkekonstruktør , dvs. (col_a, col_b) er det samme som ROW(col_a, col_b)

Ovenstående er baseret på oplysningerne i denne billet




  1. Hvordan kan jeg planlægge et job til at køre en SQL-forespørgsel dagligt?

  2. Postgresql præfiks jokertegn for fuld tekst

  3. Postgresql base64-kode

  4. Tidskompleksitet ved at sortere en database