【问题标题】:Django Rest Framework sql string queryDjango Rest Framework sql 字符串查询
【发布时间】: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 嵌套。 请帮忙..

【问题讨论】:

    标签: django django-rest-framework django-queryset django-filter


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2019-06-03
    • 2023-03-30
    • 2018-10-14
    • 2018-10-26
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多