Python 如何在django框架中使用pg_trgm运算符(例如%>;)?

Python 如何在django框架中使用pg_trgm运算符(例如%>;)?,python,django,string-formatting,string-substitution,pg-trgm,Python,Django,String Formatting,String Substitution,Pg Trgm,我正在使用pg_trgm对PostgreSQL数据库进行相似性搜索,我需要使用Django模型将结果返回到前端。但是,我遇到了一个问题,Django框架无法识别操作符%> 有什么建议吗 多谢各位 我使用model.objects.raw()执行SQL。我得到一个错误响应: unsupported format character '>' (0x3e) at index 52 searchParam ='test' mymodel.objects.raw('select * from myt

我正在使用
pg_trgm
对PostgreSQL数据库进行相似性搜索,我需要使用Django模型将结果返回到前端。但是,我遇到了一个问题,Django框架无法识别操作符
%>

有什么建议吗

多谢各位

我使用
model.objects.raw()
执行SQL。我得到一个错误响应:

unsupported format character '>' (0x3e) at index 52
searchParam ='test'
mymodel.objects.raw('select * from mytable where columnname %> %s', [searchParam])
ValueError: response:unsupported format character '>' (0x3e) at index 52

尝试用转义的
%%
符号替换
%%
术语。这将导致以下简单SQL查询:

'select * from mytable where columnname = %%%s%%'

我相信这个查询应该满足您的需要。

看起来您的问题实际上与Python的字符串替换有关。为了构造最终的查询字符串,Django执行如下操作:

self.sql % self.params
这使用了旧式的%-格式,它希望将
%>
解释为字符串替换机制,类似于
%s
,但这不是有效的组合。要在格式化字符串中创建
%%
字符,只需在输入字符串中使用
%%
,如下所示:

In [1]: MyModel.objects.raw('SELECT * FROM myapp_mymodel WHERE myfield %%> %s', ['test'])
Out[1]: <RawQuerySet: SELECT * FROM myapp_mymodel WHERE myfield %> test>
[1]中的
:MyModel.objects.raw('SELECT*FROM myapp_MyModel WHERE myfield%%>%s',['test']))
Out[1]:测试>

顺便说一句,Django已经掌握了
pg_trgm
的基本用法,而不必求助于原始查询字符串。只需确保您的迁移首先激活扩展:

除了类似的trigram\u查找之外,您还可以使用两个其他表达式

要使用它们,您需要在PostgreSQL上激活
pg\u trgm
。 您可以使用
TrigramExtension
安装它


谢谢。但是[=]不符合我上面显示的相似性搜索。混淆了。现在尝试使用转义
%%
符号的答案。感谢您提供了这么多好的建议,我使用[%%>]解决了问题。我使用了trigramSimilarity。它太棒了!非常感谢。