PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

bagaimana cara memiliki filter Accent-insensitive di Django dengan postgres?

EDIT:Django 1.8 membuat pencarian aksen tidak sensitif untuk bawaan postgresql. https://docs.djangoproject. com/en/dev/ref/contrib/postgres/lookups/#std:fieldlookup-unaccent

Sebenarnya di postgres contrib (8.4+) ada fungsi tanpa aksen untuk mencari dengan mudah:

untuk postgres 9/8.5:

untuk postgres 8.4:

di sini contoh penggunaan dari Django:

vals = MyObject.objects.raw(
        "SELECT * \
         FROM myapp_myobject \
         WHERE unaccent(name) LIKE \'%"+search_text+"%'")

Anda dapat menerapkan penerapan tanpa aksen pada penelusuran teks sebelum membandingkan.

Opsi yang saya buat adalah:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# parts of credits comes to clarisys.fr
from django.db.backends.postgresql_psycopg2.base import *

class DatabaseOperations(DatabaseOperations):
    def lookup_cast(self, lookup_type):
        if lookup_type in('icontains', 'istartswith'):
            return "UPPER(unaccent(%s::text))"
        else:
            return super(DatabaseOperations, self).lookup_cast(lookup_type)

class DatabaseWrapper(DatabaseWrapper):
    def __init__(self, *args, **kwargs):
        super(DatabaseWrapper, self).__init__(*args, **kwargs)
        self.operators['icontains'] = 'LIKE UPPER(unaccent(%s))'
        self.operators['istartswith'] = 'LIKE UPPER(unaccent(%s))'
        self.ops = DatabaseOperations(self)

Gunakan file ini base.py dalam folder dan gunakan folder ini sebagai backend db. icontains dan istartswith sekarang tidak peka huruf besar/kecil dan aksen.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana to_timestamp() Bekerja di PostgreSQL

  2. PostgreSQL:serial vs identitas

  3. Cara tercepat untuk mengeksekusi kueri penghapusan dalam tabel besar di PostgreSQL

  4. Nama kolom SQL dan membandingkannya dengan catatan baris di tabel lain di PostgreSQL

  5. BERGABUNG (PILIH ... ) pada 1=1?