Django queryset选择concat

时间:2016-08-15 07:36:59

标签: mysql django select django-queryset concat

我有一个像这样的SQL查询:

select *
from sys_user_promotion_record
where user_id=102 and concat(',' ,vendor_id, ',') like '%,1,%'

如何将查询转换为django queryset? 到目前为止,我设法制作这个django查询集:

SysUserPromotionRecord.objects.filter(user_id=102, vendor_id__contains=','+'1'+',')

如何将concat(',' ,vendor_id, ',')转换为django queryset? 我避免在我的代码上使用原始SQL查询。谢谢。

这是vendor_id值示例:

  • 1,11,14

  • 2,1,5-

  • -3,5,11-

当执行sql时,将出现第1行和第2行。

1 个答案:

答案 0 :(得分:1)

在类型like '%,1,%'中的mysql查询是数据库杀手。

  

B树索引可用于表达式中的列比较   使用=,>,> =,<,< =或BETWEEN运算符。该指数也可以   如果LIKE的参数是常量字符串,则用于LIKE比较   这不是以通配符开头的。

这里的根本问题是您没有规范化数据库。您不应该像这样存储数据的原因在这里得到了很好的解释:Is storing a delimited list in a database column really that bad? 您的首要任务是规范化您的数据库。

作为临时补丁,请查看django Concat函数。

http://dev.mysql.com/doc/refman/5.7/en/index-btree-hash.html