当WHERE子句具有功能时,如何编写Django查询?

时间:2019-03-17 18:28:54

标签: python sql django python-3.x postgresql

我正在使用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的术语中执行上述操作,因为其中涉及到更复杂的功能。

1 个答案:

答案 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)