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

как да имам нечувствителен към акцентите филтър в django с postgres?

РЕДАКТИРАНЕ:Django 1.8 прави нечувствително търсене на акценти за вграден postgresql. https://docs.djangoproject. com/en/dev/ref/contrib/postgres/lookups/#std:fieldlookup-unaccent

Всъщност в postgres contrib (8.4+) има функция без ударение за лесно търсене:

за postgres 9/8.5:

за postgres 8.4:

ето пример за използване от django:

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

Можете да приложите прилагане на безакцент при търсене на текст преди сравнение.

Опцията, която направих, е:

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

Използвайте този файл base.py в папка и използвайте тази папка като db backend. icontains и istartswith вече са нечувствителни към главни и малки букви и ударения.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Посочете часова зона, която да използвате като референтна часова зона

  2. Промяна на съпоставяне на база данни, Ctype в Postgresql

  3. Заявката не попада в индекса - това ли са правилните колони за индексиране?

  4. кодирането UTF8 не съответства на локала en_US; избраната настройка LC_CTYPE изисква кодиране LATIN1

  5. Как да ограничим достъпа до база данни в PostgreSQL