首页 > 解决方案 > Django中的SQL instr等价物

问题描述

我想检查给定的文本是否包含在 db 中的子字符串中,

例如:-要搜索的字符串- “我的名字是 john”

db/column_name 中的字符串- “john”。

SQL查询

select * from `demo` where instr('my name is john','column_name') > 0

上述查询的 Django 等效项是什么?

注意- 实际字符串非常大,大约 255 个字符,所以我不能使用正则表达式来提取字符串,因为输入是动态的。

标签: mysqlsqlpython-3.xdjangodjango-models

解决方案


您将首先使用annotate将您的字符串注释到查询中,然后在其上使用 contains查找 [Django docs]来查找它是否包含给定的列:

from django.db.models import CharField, F, Q, Value


queryset = TestModel.objects.annotate(
    search_text=Value('my name is john', output_field=CharField())
).filter(
    Q(search_text__contains=F('column_name')) & Q(search_text__contains=F('second_column_name'))
)

推荐阅读