我有一个像这样的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行。
答案 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