Поиск списка кортежей в python - PullRequest
0 голосов
/ 15 января 2011

У меня есть база данных (sqlite) членов организации (менее 200 человек).Сейчас я пытаюсь написать приложение wx, которое будет искать в базе данных и возвращать некоторую контактную информацию в wx.grid.Приложение будет иметь 2 TextCtrls, один для имени и один для фамилии.То, что я хочу сделать здесь, это сделать возможным написать только одну или несколько букв в textctrls, и это начнет возвращать результат.Итак, если я ищу «Джон Смит», я пишу «Джо» в первом TextCtrl, и это возвращает каждого Джона (или любого другого, имя которого начинается с этих букв).У него не будет кнопки «поиск», вместо этого он начнет поиск всякий раз, когда я нажимаю клавишу.

Один из способов решения этой проблемы - поиск в базе данных с помощью «SELECT * FROM contactlistview WHERE forname LIKE»Jo% '' Но это кажется плохой идеей (очень тяжело сделать базу данных для каждого нажатия клавиши?).Вместо этого я подумал об использовании fetchall () в запросе, подобном этому «SELECT * FROM contactlistview», а затем при каждом нажатии клавиши выполнял поиск в списке кортежей, возвращенных запросом.И это моя проблема: поиск в списке не так уж и сложен, но как мне найти в списке кортежей с подстановочными знаками?

Ответы [ 3 ]

2 голосов
/ 15 января 2011

Я думаю, что в общем случае вам не следует бояться задавать задачи базе данных.Вполне возможно, что предложение LIKE будет очень быстрым.Sqlite реализован в достаточно надежном C-коде и с удовольствием справится с такими запросами.

Если вас беспокоит отправка слишком большого количества запросов, почему бы не отправить запрос, когда пользователь введет порог символов,например, три?

Понимание списка - это, вероятно, лучший способ вернуть результат, если вы хотите добавить фильтрацию.

2 голосов
/ 15 января 2011
selected = [t for t in all_data if t[1].startswith('Jo')]

но, мера, не угадай. Я думаю, что в некоторых случаях запрос будет быстрее - особенно если у вас слишком много записей. Возможно, вам следует использовать запрос для первого символа, а затем начать использовать фильтр на стороне Python, поскольку у вас уже есть результаты.

0 голосов
/ 15 января 2011

Если вы ищете строку, соответствующую началу, используя LIKE, например, «abc%» (а не где-либо в строке - «% abc%»), поиск должен быть довольно быстрым, если у вас есть индекс в поле, так как БД может использовать индекс, чтобы помочь найти совпадения.

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