如何在Django中匹配字符串与数据库字段?

2 投票
2 回答
6099 浏览
提问于 2025-04-16 01:22

我有一个数据库,其中有一列叫做 name,里面的数据像这样:

'Very big News'
'News'
'something else'
'New Nes'
'Fresh News'
'Something else'

现在,如果给我一个字符串,里面有几个单词,我该怎么查找这些单词中有没有出现在 name 这一列里呢?

举个例子:

我有一个字符串 'super very news'。我需要在我的数据库里查找,看看有没有记录的 name 字段包含 'super''very''news',或者包含 'super very''very news' 这样的组合。

2 个回答

0

如果你的单词列表很小而且简单,你可以自己写一个查找表和索引器;但如果单词列表比较大或者复杂,那你就需要一个像OpenFTS这样的全文数据库。

http://openfts.sourceforge.net/

7

更新 根据评论的反馈。可以在这里查看查询集文档 这里

your_search_query = 'super very news'

qset = Q()
for term in your_search_query.split():
    qset |= Q(name__contains=term)

matching_results = YourModel.objects.filter(qset)

这段代码的效果相当于:

matching_result = YourModel.objects.filter(Q(name__contains='super') |
                                           Q(name__contains='very') |   
                                           Q(name__contains='news'))

这会生成(大致上)以下的SQL语句,且只用了一次查询:

 select * from your_model where name like '%super%' or name like '%very%' or name like '%news%'

撰写回答