PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

làm thế nào để có bộ lọc không nhạy cảm trong django với postgres?

CHỈNH SỬA:Django 1.8 giúp tra cứu nội dung postgresql không nhạy trọng âm. https://docs.djangoproject. com / en / dev / ref / Contrib / postgres / lookups / # std:fieldlookup-unaccent

Trên thực tế, trong postgres Contrib (8.4+), có một chức năng đơn giản để tìm kiếm dễ dàng:

cho postgres 9 / 8.5:

cho postgres 8.4:

đây là một ví dụ về cách sử dụng từ django:

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

Bạn có thể áp dụng áp dụng không công tâm trên tìm kiếm văn bản trước khi so sánh.

Tùy chọn tôi đã thực hiện là:

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

Sử dụng tệp này base.py trong một thư mục và sử dụng thư mục này làm phụ trợ db. icontains và istartswith hiện không phân biệt chữ hoa và chữ thường.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi:EXDEV:không cho phép liên kết thiết bị chéo, đổi tên '/ tmp / trên Ubuntu 16.04 LTS

  2. Ràng buộc loại trừ `EXCLUDE USING gist (c WITH &&) 'nghĩa là gì?

  3. Rails:Việc chuyển đổi từ MySQL sang PostGres có phá vỡ tính toán khoảng cách Geokit?

  4. Lỗi cú pháp nhập không hợp lệ cho số nguyên đối với một số không phải là số nguyên?

  5. Trả về các giá trị không phải dạng số từ cột cơ sở dữ liệu PostgreSQL