小编Fli*_*oij的帖子

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

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

这似乎适用于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上工作(使用':'指示符)

现在我错过了什么?

python django mariadb

5
推荐指数
1
解决办法
2857
查看次数

标签 统计

django ×1

mariadb ×1

python ×1