python - 在 django sql 查询中转义 % 会导致列表超出范围

标签 python sql django django-rest-framework

我尝试在 pgadmin 中运行以下 SQL 查询,它成功了:

 SELECT <columns>
 FROM <tables>
 WHERE 
     date_visited >= '2023-05-26 07:05:00'::timestamp 
     AND date_visited <= '2023-05-26 07:07:00'::timestamp
     AND url LIKE '%/mymodule/api/myurl/%';

我想在 django Rest 端点中调用相同的 url。所以,我编写了如下代码:

with connection.cursor() as cursor:
    cursor.execute('''
        SELECT <columns>
        FROM <tables>
        WHERE 
            date_visited >= '%s'::timestamp 
            AND date_visited <=  '%s'::timestamp
            AND url LIKE '%%%s%%';
        ''', [from_date, to_date, url])

但它给了我列表索引超出范围错误。我想我弄错了 '%%%s%%'。我尝试使用 %% 在原始查询中扩展 % 。但这似乎不起作用。这里出了什么问题?

最佳答案

您可以.filter(…) [Django-doc]与:

MyModel.objects.filter(
    date_visited__between=('2023-05-26 07:05:00', '2023-05-26 07:07:00'),
    <b>url__contains='/mymodule/api/myurl/'</b>,
)

这里我们可以使用__contains lookup [Django-doc] 区分大小写匹配。

关于python - 在 django sql 查询中转义 % 会导致列表超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76352024/

相关文章:

python - 检查项目是否在 ManyToMany 字段中?

django - 如何显示作为最终 django 表单向导步骤输入的所有数据的预览?

django - 如何将类、id、占位符属性添加到 django 模型表单中的字段

python - IPython 笔记本不工作

python - 使用一个 sqlite3 查询从两个不同行检索相同的列数据?

mysql - SQL查询获取树中所有元素的id

sql - 分组连续行

python - 为什么 Django 模板语言不允许像 [0][1] 这样的东西?

python - 将正则表达式应用于 Pandas 数据框

mysql - 通过分组依据和限制选择n个数据