Django:在原始SQL查询上使用命名参数

Fli*_*oij 5 python django mariadb

我正在尝试执行动态构建的原始查询.为了确保参数插入有效位置我使用命名参数.

这似乎适用于Sqlite没有任何问题.(我的所有测试都成功了)但是当我对MariaDb运行相同的代码时,它失败了..

一个简单的示例查询:

 SELECT u.* 
    FROM users_gigyauser AS u
  WHERE u.email like :u_email
    GROUP BY u.id
    ORDER BY u.last_login DESC
  LIMIT 60 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

参数是:

 {'u_email': '%test%'}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是默认语法错误,因为参数未被替换.我尝试使用'%'作为指标,但这导致sql尝试解析

%u[_email]
Run Code Online (Sandbox Code Playgroud)

并返回了一个类型错误.

我正在执行查询,如:

 raw_queryset = GigyaUser.objects.raw(self.sql_fetch, self._query_object['params'])
Run Code Online (Sandbox Code Playgroud)

或者在计算时:

 cursor.execute(self.sql_count, self._query_object['params'])
Run Code Online (Sandbox Code Playgroud)

两者都在MariaDB上给出相同的错误但在Sqlite上工作(使用':'指示符)

现在我错过了什么?

yed*_*tko 5

编辑:

该格式必须具有s以下后缀:

%(u_email)s
Run Code Online (Sandbox Code Playgroud)

  • Django orm非常适合与简单对象相关的数据库查询。但是,当您的数据库结构变得更高级并且您需要生成准确的报告/选择时,情况就会变糟。我需要基于动态json对象生成专门的选择。 (2认同)