在SQLite数据库中进行高级搜索

时间:2011-11-09 16:16:58

标签: python database search select sqlite

我得到了有人名字的地址簿。 我使用以下代码在名称列中执行搜索:

register = []
text = "{0}%" .format(self.lineEdit_6.text())
c.execute("select id, name from contacts where nome like '{0}'" .format(text))
for row in c:
    register.append(row)
    self.listWidget_4.addItem(str(row[1]))
    self.listWidget_6.addItem(str(row[0]))
if register == []:
    self.listWidget_4.addItem("No result")

name列有姓名和姓氏(比如John Smith) 当我不记得整个名字而只是起始字母时,上面的代码工作正常。 但我希望结果显示所有匹配,而不仅仅是名称的开头。 所以,如果我有3个名字(Simonne Welsh,Adam Loyd,John Smith)并输入字母S,它必须给出Simone Welsh和John Smith的名字结果。 我该怎么做?

1 个答案:

答案 0 :(得分:1)

这样做:

    text = "%{0}%" .format(self.lineEdit_6.text())
    c.execute("select id, name from contacts where nome like '{0}'" .format(text))

(在匹配字符串之前和之后包含通配符)。

另外,请考虑使用(注意:更正此语法):

    c.execute("select id, name from contacts where nome like ?", [text])

    c.execute("select id, name from contacts where nome like ?", (text, ))

将:

  1. 使您的代码免受SQL注入攻击。

  2. 正确处理text包含特殊字符的情况,例如单引号(例如,O'Reilly的名称)。