Django Rest Framework sql 字符串查询

Posted

技术标签:

【中文标题】Django Rest Framework sql 字符串查询【英文标题】:Django Rest Framework sql string query 【发布时间】:2020-06-24 02:21:31 【问题描述】:

我知道将 API 过滤添加到 Django 中的 rest API 是否非常容易。

/api?name=joseph&age=5. # I already have that

但是,我使用 react 包来生成查询,它会生成如下 SQL 字符串:

"name = 'joseph' AND age = 5"

我想知道用 SQL 字符串过滤表的最简单方法是什么。 查询可以使用 OR 和 AND 和 NOT 嵌套。 请帮忙..

【问题讨论】:

【参考方案1】:

在 django 中执行原始 sql 查询非常简单 你执行。 只需要在查询集中添加 raw 并执行 模型构建。

以下是代码 sn-p 供您参考

>>> Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')
...
>>> Person.objects.raw('SELECT last_name, birth_date, first_name, id FROM myapp_person')
... 

根据您的要求举例:

name = 'joseph'
age = 5
sqlQuery = "SELECT * from <DBNAME> where name = "+name+" AND age = "+age
result = Person.objects.raw(sqlQuery)

# use of OR operator
name = 'joseph'
age = 5
result = Person.objects.filter(name=name) | Person.objects.filter(age=age) 

## use of AND operator
name = 'joseph'
age = 5
result = Person.objects.filter(name=name).filter(age=age) 

您可以在这里阅读more

【讨论】:

所以你建议使用“post”将查询字符串发送到API,并在“Person.objects.raw(sqlQuery)”中使用该字符串作为sqlQuery。由于您提供的其他示例是硬编码的。 是的,最好将所需的参数作为发布请求发送@JooJoo1020 “Person.objects.raw(sqlQuery)”会足够聪明地处理 OR 和 AND 和 NOT 吗?那么 sqlQuery 可能类似于 "name = 'joseph' or age >5" 吗? 两个都可以,试试看,你觉得哪一个舒服,我已经说明了所有可用的选择@JooJoo1020

以上是关于Django Rest Framework sql 字符串查询的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

怎么安装django rest framework

django rest framework中文介绍

17-Django-Django REST framework-REST framework及RESTful简介

为啥 django-rest-framework 不显示 OneToOneField 数据 - django

Django:rest framework之分页(Pagination)