django postgres LIKE 查询语法错误在 "%" 或附近



在django中,要查询jsonb,我愿意:

    cursor.execute("""
    SELECT * FROM "somemodel_some_model" 
    WHERE UPPER(("somemodel_some_model"."data" 
    #>> array[0,'fieldX'])::text[]) 
    LIKE UPPER(% %s %)
    """,[my_string])

..我得到:

IndexError: list index out of range

我知道以上是不正确的,因为当我使用ORM来实现这一点时:

obj=Some_Model.objects.filter(data__0__fieldX__icontains=search_term)

..我得到了结果。为了调查此事,我掉落到SQL并进行以下操作:

SELECT * FROM "somemodel_some_model"
WHERE UPPER(("somemodel_some_model"."data" 
#>> array[0, 'fieldX'])::text[]) 
LIKE UPPER(%my_search_string%)

..但是,我得到:

django.db.utils.programmingerror:"%"或附近的语法错误

那么,问题是,我需要逃脱%吗?似乎很奇怪

使用cursor.ecute时的语法应该像 %% string %%,或者如果您使用列,并且像 %% || column || %%

尝试以下:

 cursor.execute("SELECT * FROM somemodel_some_model WHERE UPER((somemodel_some_model.data #>> array[0,'fieldX'])::text[])  LIKE UPPER(concat('%', %s, '%')) ",[my_string])

因为如果您使用UPPER(% %s %)

由此产生的查询就像 UPPER(% 'your_string' %)(我不知道django quotes literals(或 UPPER(% your_string %)-两种情况都不适用于sql,因此您要么给您在django中构造 [%my_string%],要么使用concat如上所述

最新更新