我的数据库中有一个名称表,我希望对其进行模糊搜索,例如我的数据库包含:
Name ID
John Smith 1
Edward Smith 2
Gabriel Gray 3
Paul Roberts 4
当我通过python搜索数据库时,我只能进行完全匹配搜索。但我希望能够进行模糊搜索,我可以搜索“史密斯”这个名字并带回约翰史密斯和爱德华史密斯。
答案 0 :(得分:5)
以最简单的形式,您可以使用LIKE
比较:
SELECT * FROM table WHERE name LIKE '%smith%';
使用FULLTEXT索引(大量文本)可以完成更精细的搜索,SOUNDEX()
(适用于英语单词,与其他语言匹配,从“有点可行”到“可怕”), levenshtein词语距离等。
答案 1 :(得分:0)
import MySQLdb
search_str = 'smith'
conn = MySQLdb.connect(host="localhost", user="me",passwd="pw",db="mydb")
c = conn.cursor()
c.execute("SELECT name FROM mytable WHERE name LIKE %s", '%' + search_str + '%')
c.fetchall()
c.close()
conn.close()