django原始查询百分号问题

joh*_*ian 5 django django-models

我在like函数中尝试Django原始sql查询,但结果为空.我尝试mysql客户端工具这个查询并获得许多记录.如何解决这个问题?

我的查询:

  SELECT s.* , s.id as pk 
    FROM d_status as s, 
         (select post_id 
            from p_useractions 
           where from_user_id in 
                 (select to_user_id 
                    from p_fallowers 
                   where from_user_id = 1)
         ) as a 
   WHERE s.from_user_id = 1 OR 
         s.text like '%@Mustafa Yontar2123%' OR 
         s.id = a.post_id 
GROUP BY s.id 
ORDER BY s.last_update 
   LIMIT 25
Run Code Online (Sandbox Code Playgroud)

Clo*_*ans 14

尝试更换每个%%%.因此,您示例中的相关部分将如下所示:'%%@Mustafa Yontar2123%%'.


Cri*_*itu 2

引用MySQL的文档

通过 LIKE,您可以在模式中使用以下两个通配符。

    人物描述
    % 匹配任意数量的字符,甚至零个字符
    _ 精确匹配一个字符

要测试通配符的文字实例,请在其前面添加
转义字符。如果未指定 ESCAPE 字符,则假定为 \。

所以你的模式需要是'\%@Mustafa Yontar2123\%'. 查询的 Python 代码如下所示:

query = r"""SELECT s.* , s.id as pk FROM d_status as s, 
                   (SELECT post_id FROM p_useractions WHERE from_user_id in
                     (SELECT to_user_id FROM p_fallowers WHERE from_user_id = 1)) as a
            WHERE s.from_user_id = 1 or
                  s.text like '\%@Mustafa Yontar2123\%' or
                  s.id = a.post_id
            GROUP BY s.id
            ORDER BY s.last_update
            LIMIT 25"""
Run Code Online (Sandbox Code Playgroud)

PostgreSQLSQLite的文档提到了同样的事情。