我正在使用Django和Python 3.7以及PostGres 9.5。我的PostGres表中有一个文本类型的列,该列记录文章的URL。我想运行一个查询,比较查询字符串之前的所有内容,例如
SELECT * FROM article where regexp_replace(url, '\?.*$', '') = :url_wo_query_info
但是我不确定如何在Django中实现这一目标。通常,如果我只想对URL进行直接查询,我可以写
Article.objects.filter(url=url)
但是我不确定如何在Django的术语中执行上述操作,因为其中涉及到更复杂的功能。
答案 0 :(得分:0)
您可以将 Func 与F表达式一起使用,以在模型字段上使用数据库功能。您的查询在Django ORM中如下所示:
Article.objects.all().annotate(
processed_url=Func(
F('url'),
Value('\?.*$'), Value(''),
function='regexp_replace',
)
).filter(processed_url=url_wo_query_info)