【问题标题】:SQL instr equivalent in DjangoDjango中的SQL instr等价物
【发布时间】:2021-08-24 06:39:13
【问题描述】:

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

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

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

SQL 查询

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

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

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

【问题讨论】:

  • string.find(str, [start], [end])?
  • @Akina 谢谢,这个的 django 等效查询是什么,因为这个 find 方法是纯 python?

标签: mysql sql python-3.x django django-models


【解决方案1】:

您将首先使用annotate 将您的字符串注释到查询中,然后在其上使用contains lookup [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'))
)

【讨论】:

  • 非常感谢你,这让我松了一口气。请告诉我如何在上面的查询.filter( search_text__contains=F('column_name'),search_text__contains=F('second_column_name')) 中使用 AND 我试过了,我得到 keyword argument 重复错误
  • @HarvindarSinghGarcha 使用 Q objects,检查我的编辑。
【解决方案2】:
class YourModel(models):
    message = models.CharField(max_length=255)

如果你想查询消息子字符串,试试这样:

YourModel.objects.filter(message__contains='john')

作为回报,您将获得对象/数据库行的列表,其中列(消息)具有“john”的替代项

【讨论】:

  • 问题是我要搜索的大文本每次都不是静态的,我无法直接搜索“john”,因为我需要使用正则表达式并从文本中提取 john 进行搜索信息。我可以使用 db 中的字符串作为子字符串来检查给定输入字符串中的字符串的任何其他方式吗?
  • 将您的 search_word 存储在一个变量中,并将其传递给 'john'。
  • 我已经尝试过了,在 db 中我们将 name 存储为 'john' 并且我们将输入作为 'my name is john' 所以我想通过使用 db_column 值作为 sub 来检查 db 的输入字符串并作为要搜索的字符串输入。
猜你喜欢
  • 2015-11-02
  • 2012-02-18
  • 2013-08-11
  • 2010-11-07
  • 2017-11-22
  • 2017-01-15
  • 1970-01-01
  • 2015-02-06
  • 2010-09-29
相关资源
最近更新 更多