Django相当于MySQL的FIND_IN_SET()

时间:2011-11-29 14:04:11

标签: mysql django

在旧版MySQL数据库中,我有一个表格,其中的字段是以逗号分隔的值列表:

id  | field
---------------
1   | 2,4,8
2   | 1,4,15,24

以下查询的Django等价物是什么?

SELECT * FROM `table_name` WHERE FIND_IN_SET(15, field)

假设Django将此字段视为常规CharField

3 个答案:

答案 0 :(得分:6)

对于那种习惯,我认为你可能会被extra()

困住

示例:

# Warning, MySQL specific query ahead!
Model.objects.extra(where=['FIND_IN_SET(15, field)'])

答案 1 :(得分:3)

没有一个。而且不应该有一个。这是一个特别非标准的MySQL函数,Django不关心特定于db的行为。使用自定义SQL。

答案 2 :(得分:-1)

使用extra()方法作为最后的手段。根据Django文档,可以随时弃用extra()方法。

最好在Django中使用正则表达式。

示例:

  • Model.objects.filter(field__iregex = r'(24),?')

上面的QuerySet将在字段列中检查数字'24',并且如果逗号后跟数字(24,25)或仅数字(12,24),也将匹配。