PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để truy vấn độ dài của Django ArrayField?

extra () hàm không được chấp nhận theo tài liệu :

Đây là cách bạn có thể làm điều tương tự bằng cách sử dụng Annotation tùy chỉnh chức năng:

from django.db import models

class ArrayLength(models.Func):
    function = 'CARDINALITY'

MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')

Lưu ý rằng cardinality () có sẵn trong PostgreSQL 9.4 hoặc mới hơn. Nếu bạn đang sử dụng phiên bản cũ hơn, bạn phải sử dụng array_length () :

MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')

Một lưu ý với truy vấn thứ hai này là một mảng trống sẽ được sắp xếp trước tất cả những mảng không trống. Điều này có thể được giải quyết bằng cách liên kết NULL giá trị từ array_length thành 0.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố với bộ chứa postgresql và pgadmin docker

  2. CHỌN .. VÀO để tạo bảng trong PL / pgSQL

  3. Nâng cấp hàng loạt với SQLAlchemy

  4. Làm thế nào để kiểm tra xem một hàng có tồn tại trong một thủ tục được lưu trữ PostgreSQL hay không?

  5. Làm cách nào để tìm hiểu xem một bản nâng cấp có phải là bản cập nhật với PostgreSQL 9.5+ UPSERT hay không?