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

Django филтър за заявки, използващ голям масив от идентификатори в Postgres DB

Намерих решение, основаващо се на отговора на @erwin-brandstetter, използвайки персонализирано търсене

from django.db.models import Lookup
from django.db.models.fields import Field

@Field.register_lookup
class EfficientInLookup(Lookup):

    lookup_name = "ineff"

    def as_sql(self, compiler, connection):
        lhs, lhs_params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params = lhs_params + rhs_params
        return "%s IN (SELECT unnest(%s))" % (lhs, rhs), params

Това позволява филтриране по следния начин:

MyModel.objects.filter(id__ineff=<list-of-values>)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Psycopg2 Вмъкване в таблица с заместители

  2. Как да стартирате множество транзакции едновременно в PostgreSQL

  3. Уникално ограничение върху множество колони

  4. SELECT или INSERT ред в една команда

  5. Postgres FOR LOOP