Сделайте расширенный поиск в базе данных SQLite - PullRequest
0 голосов
/ 09 ноября 2011

Мне досталась и адресная книга с именами людей.Я использую следующий код для выполнения поиска в столбце имени:

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")

В столбце имени есть имя и фамилия (например, Джон Смит). Приведенный выше код отлично работает, когда я не помнюполное имя, но только начальные буквы.Но я хочу, чтобы результаты показали все совпадения, а не только в начале названия.Итак, если я получу 3 имени (Симонна Уэлш, Адам Лойд, Джон Смит) и наберу букву S, она должна дать результат имен Симоне Уэлш и Джон Смит.Как мне это сделать?

1 Ответ

1 голос
/ 09 ноября 2011

Сделайте это:

    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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...