PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

jak mieć filtr niewrażliwy na akcenty w django z postgresem?

EDYCJA:Django 1.8 tworzy niewrażliwe na akcenty wyszukiwanie dla wbudowanego postgresql. https://docs.djangoproject. com/pl/dev/ref/contrib/postgres/lookups/#std:fieldlookup-unaccent

W rzeczywistości w postgres contrib (8.4+) istnieje nieakcentowana funkcja do łatwego wyszukiwania:

dla postgresu 9/8.5:

dla postgresu 8.4:

tutaj przykład użycia z django:

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

Możesz zastosować nieakcent w wyszukiwaniu tekstu przed porównaniem.

Wybrana przeze mnie opcja to:

#!/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)

Użyj tego pliku base.py w folderze i użyj tego folderu jako zaplecza bazy danych. icontains i istartswith są teraz niewrażliwe na wielkość liter i akcent.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd uwierzytelnienia hasła podczas uruchamiania migracji laravel

  2. Jak sprawić, by instalacja gem działała na OS X Lion z Ruby 1.8.7 bez błędów seg?

  3. Skopiuj dane tabeli z jednej bazy danych do drugiej

  4. zbuduj dynamiczne zapytanie SQL za pomocą biblioteki psycopg2 python i używając dobrych narzędzi do konwersji

  5. postgresql - liczba całkowita poza zakresem