PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज के साथ django में एक्सेंट-असंवेदनशील फ़िल्टर कैसे करें?

संपादित करें:Django 1.8 postgresql बिलिन के लिए असंवेदनशील लुकअप बनाता है। https://docs.djangoproject. com/hi/dev/ref/contrib/postgres/lookups/#std:fieldlookup-unaccent

वास्तव में पोस्टग्रेज कॉन्ट्रिब (8.4+) में आसानी से खोज करने के लिए एक गैर-उच्चारण कार्य है:

पोस्टग्रेज 9/8.5 के लिए:

पोस्टग्रेज 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 एक फ़ोल्डर में और इस फ़ोल्डर को डीबी बैकएंड के रूप में उपयोग करें। 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. postgresql - sql - `सत्य` मानों की गणना

  2. Oracle से PostgreSQL — कर्सर और ltree

  3. अपवाद के आधार पर विंडो फ़ंक्शन और समूह को पोस्टग्रेज़ करता है

  4. sqlalchemy postgresql जहां int =string

  5. अलग-अलग अस्थिरता वाले कार्यों के लिए योजनाकार अलग-अलग परिणामों के साथ क्यों आ रहा है?