sql >> Database >  >> RDS >> PostgreSQL

Django ORM vergelijk tupels / lexicografische volgorde

Hieronder is een manier die werkt in Django pre 3.2, met behulp van annotate (die helaas ook de kleine hack nodig heeft om een ​​output_field in te stellen , ook al wordt de waarde niet gebruikt).

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')

In Django 3.2+ kun je blijkbaar gebruik maken van alias in plaats van annotate

Dit werkt omdat wat een tuple wordt genoemd, eigenlijk een afkorting is voor een Rijconstructor , d.w.z. (col_a, col_b) is hetzelfde als ROW(col_a, col_b)

Het bovenstaande is gebaseerd op de informatie in dit ticket




  1. Mysql-resultaat krijgen van itemupdate

  2. Spring JDBC-verbindingspool en InputStream-resultaten

  3. Een lokale SQL Server-database instellen

  4. Standaard tekencodering van SQL Server