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 两因素身份验证
17-Django-Django REST framework-REST framework及RESTful简介