python - Django extra + where:如何转义标识符
问题描述
我extra
在 Django 中有一个带有where
子句的过滤器,但表名是动态的。
filtered_queryset = queryset.extra(
where=[
f'({table_name}.modified_on, {table_name}.id) > (%s, %s)',
],
params=(after_ts, after_id),
)
我怎样才能最好地避免 f-string 以确保它不对 SQL 注入开放?
我希望 SQL 进行元组比较,而不是多重>
和>=
with AND
。从之前的测试来看,它似乎更有可能使用多列索引。
(这是一些自定义分页代码的一部分,其中光标本质上是一个日期时间和 id 的元组)
解决方案
为什么不把它写成过滤器呢?
filtered_queryset = queryset.filter(
Q(modified_on__gt=after_ts) |
Q(Q(modified_on__gte=after_ts) & Q(id__gt=after_id))
)
PS:有点不清楚您的查询要做什么,我认为是这样,但也许您想过滤其他内容。
推荐阅读
- r - 如何在 R 中使用应用函数来查找子组变量的最大值
- python - 如何将一个 Excel 工作簿的多个选项卡复制粘贴到现有的 Excel 工作簿到不同的工作表中?
- angular - 有没有办法只在 Angular 中用键构建查询字符串?
- reactjs - 一个变量未在页面上呈现
- google-sheets - 如果单元格的值在另一个工作表的另一个列表中,如何使用条件格式为单元格着色
- php - 使用 Code Igniter 3 的简单数据库表单无法正常工作
- testing - 简单 Webhook 的 Salesforce Apex 测试代码覆盖率问题
- c# - 在 C# 中添加排序链表
- scala - 澄清http4s中Path、Mount Point和Prefix的概念
- node.js - NodeJS 正在将一个脚本运行到另一个脚本中