有啥方法或包我们可以在 django 中对自定义原始 sql 查询执行过滤器(搜索)?

Posted

技术标签:

【中文标题】有啥方法或包我们可以在 django 中对自定义原始 sql 查询执行过滤器(搜索)?【英文标题】:is there any way or package by which we can perform filters(searching) on custom raw sql query in django?有什么方法或包我们可以在 django 中对自定义原始 sql 查询执行过滤器(搜索)? 【发布时间】:2022-01-09 19:30:09 【问题描述】:

我阅读了以下文件: https://docs.djangoproject.com/en/3.2/topics/db/sql/

在模型中有很多过滤器查找可用,例如:field__gtfield__ltfield__rangefield__contains,但我想将这些用作原始 sql,例如假设:

SELECT * 
FROM customers 
WHERE customers.name like '%name%' and age < 30 and status IN ('active','pending') 

这里:

customers.name like '%name%' 其中名称将是用户输入,所以我想保护它免受 sql 注入以及使用 % 运算符过滤它 age &lt; 30: 30 将是用户输入,并且想要执行 &lt; &gt; =IN ('active','pending') 我想使用 IN 运算符传递字符串列表

是否有任何适当的方法/包可供我们运行原始 sql 以防止 sql 注入以及使用 %IN&lt;&gt;= 运算符过滤数据。

【问题讨论】:

当然可以:关注this link了解更多详情 @Rvector ,只有docs.djangoproject.com/fr/2.2/topics/db/sql/…,而不是如何使用%通配符表达、IN运算符、>、 【参考方案1】:

使用 Django ORM 怎么样? (这是正确的方法)

Customer.objects.filter(name__contains=“name”, age__lt=30, status__in=[‘active’, ‘pending’])

假设表/列名称和模型/字段匹配,这将导致您正在寻找的确切查询具有您想要的所有安全性。如果您确实需要执行原始查询,那么 @Rvector 会为您提供所需的文档。

【讨论】:

如果你想运行一个复杂的查询,包括内连接、左连接、在多个表上分组 诚实地取决于查询。 Django 的 ORM,虽然可以说在很多方面都缺乏,但并不简单。 是否有任何包可以通过使用那些 __gt、__lt __contains 在原始 sql 查询中组成过滤器(where 子句)。所以我可以将用户输入直接传递给它。 我对这个问题感到困惑。您可以使用 ORM 的全部容量,也可以使用原始 sql(从技术上讲,您可以同时使用两者,但为什么)。两者都将接受用户输入。如果您使用原始 sql 路线,请确保正确转义参数 类似 RawQueryObject.where("field","=",userInput) RawQueryObject.where("field","like",userInput) RawQueryObject.where("field","in", userInputList) 在原始查询中

以上是关于有啥方法或包我们可以在 django 中对自定义原始 sql 查询执行过滤器(搜索)?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中对自定义对象的向量进行操作 [关闭]

如何在 Delphi 2009 中对自定义组件进行鼠标平移

如何在 prestashop 1.7 中对自定义页面进行 ajax 请求

无法在 Drupal 7 的视图中对自定义字段进行排序或过滤

WPF - 对自定义标记扩展进行单元测试

有啥方法可以禁用 UITextField 的听写支持?