在SQLite数据基础中进行高级搜索

2024-06-17 10:03:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本写着人名的通讯录。 我使用以下代码在“名称”列中执行搜索:

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个名字(西蒙尼·威尔士,亚当·洛伊德,约翰·史密斯)和一个字母S,它必须给出西蒙尼·威尔士和约翰·史密斯名字的结果。 我该怎么做?在


Tags: 代码textnameself名称registerformat字母
1条回答
网友
1楼 · 发布于 2024-06-17 10:03:36

这样做:

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

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

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

^{pr2}$

或者

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

这将:

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

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

相关问题 更多 >