Python 使用类似于的POstgres进行不区分大小写的搜索

Python 使用类似于的POstgres进行不区分大小写的搜索,python,sql,django,postgresql,Python,Sql,Django,Postgresql,我在Django代码中有这样的查询 cond = self.text_query(field.id, f''' EXISTS( SELECT * FROM {self.fieldvalue_db_view}

我在Django代码中有这样的查询

cond = self.text_query(field.id, f'''
                                        EXISTS(
                                            SELECT *
                                            FROM {self.fieldvalue_db_view}
                                            WHERE entry_id = {self.db_table}.id AND
                                                                    {self.fieldvalue_db_view}.field_id = {field.id} AND
                                                                    {self.fieldvalue_db_view}.{text_search_column} SIMILAR TO %(pattern)s
                                        )
                                    ''', dict(pattern='%' + val + '%'))
什么时候

它没有像“John smith”那样返回结果,但是如果

val = '%%john%smith%|%smith%john%%'
它以“John smith”返回结果

如何解决这种案件敏感性


谢谢,

您可以使用
ilike

EXISTS(
    SELECT
        1
    FROM
        { self.fieldvalue_db_view }
    WHERE
        entry_id = { self.db_table }.id
        AND { self.fieldvalue_db_view }.field_id = { field.id }
        AND { self.fieldvalue_db_view }.{ text_search_column } ILIKE %(pattern) s
)

你也不需要返回所有列,当你检查一行的存在,而不是传递一个更便宜的常数

你是否考虑将Valor转换为上行,然后将它与上面的结果进行比较?所以你将大写字母与大写字母进行比较,所有结果都将返回…不,我想给出一些单词并得到所有结果,这些单词的顺序和大小写不敏感。如果有3个单词,我可以使用ILIKE和多个条件吗?我想输入一些单词并得到所有结果,这些单词的顺序和大小写不敏感。。。使用like或pattern搜索并不容易,您可以改为查找
全文搜索
EXISTS(
    SELECT
        1
    FROM
        { self.fieldvalue_db_view }
    WHERE
        entry_id = { self.db_table }.id
        AND { self.fieldvalue_db_view }.field_id = { field.id }
        AND { self.fieldvalue_db_view }.{ text_search_column } ILIKE %(pattern) s
)