sql >> データベース >  >> RDS >> PostgreSQL

postgresを使用してdjangoでアクセントに依存しないフィルターを使用するにはどうすればよいですか?

    編集:Django 1.8は、postgresqlビルトインのアクセントに依存しないルックアップを作成します。 https://docs.djangoproject。 com / en / dev / ref / contrib / postgres / lookup /#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バックエンドとして使用します。 icontainsとistartswithは、大文字と小文字およびアクセントに依存しないようになりました。



    1. SQL Server:両方にWHERE句がある2つのクエリでUNIONを使用するにはどうすればよいですか?

    2. 等しい(=)と1つのリテラル値を持つINのパフォーマンスの違い

    3. テーブルの列をカウントするにはどうすればよいですか

    4. JDBCステートメントの例–バッチ挿入、更新、削除