PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Django ORM сравнява кортежи / лексикографско подреждане

По-долу е даден начин, който работи в Django преди 3.2, като се използва annotate (което също за съжаление се нуждае от лек хак за задаване на output_field , въпреки че стойността не се използва).

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

В Django 3.2+ очевидно можете да използвате alias вместо annotate

Това работи, тъй като това, което се нарича кортеж, всъщност е стенограма за Конструктор на ред , т.е. (col_a, col_b) е същото като ROW(col_a, col_b)

Горното се основава на информацията в този билет




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java + SSH + Postgres

  2. Не може да използва uuid и да създаде разширение, за да го използва

  3. strapi database.js / множество конфигурации на база данни

  4. Sqlalchemy не работи с пагинация

  5. търсене на текст в postgres