У меня большая база данных с идентификатором 10000. Когда я ищу имя в своей базе данных, это занимает много времени, и мне нужен способ сократить время в кратчайшие сроки ?? Я использую этот способ:
while (query.next()):
line3 = self.lineEdit_4.text()
query.exec_("SELECT * FROM test WHERE name LIKE '%s';" % ("%"+line3+"%"))
model = QSqlTableModel()
model.setQuery(query)
model.select()
self.tableView.setModel(model)
1 ответ
О, подожди. Исходный ответ приведен ниже, но, глядя на ваш код, кажется, что вы можете повторно выполнять свой запрос для каждой строки в результате.
Вам нужно показать нам код над оператором while
, который изначально создает и заполняет query
.
Оригинальный ответ:
Ваш поиск нельзя оптимизировать с помощью индекса, потому что у вас есть подстановочный знак в начале вашего поискового запроса. Вы можете сделать следующее:
Удалите подстановочный знак в начале поиска и попросите пользователя ввести первые несколько символов имени (а не символы в любом месте имени). Вам нужно будет убедиться, что в столбце
name
есть индекс.Примените дополнительные критерии, чтобы ограничить количество имен, которые оператор SQL должен искать (например, почтовый индекс). Вам нужно будет убедиться, что в другом столбце, который вы ищете, есть индекс.
Изучите пользователя полнотекстового индексирования и поиска.
На самом деле это не вопрос Python или QT, а скорее вопрос, связанный с любой базой данных SQL, в которую вы отправляете свой запрос.
Наконец, ваш код завершится ошибкой, если имя, которое вводит пользователь, содержит апостроф (например, имя O'Reilly) и подвергается опасности атаки SQL-инъекцией. Вы должны переключиться на параметризованный запрос, что-то вроде следующего (я не знаю, в частности, интерфейс PyQT):
query.exec_("SELECT * FROM test WHERE name LIKE ?;" ("%"+line3+"%"))
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.