#python #mysql
#питон #mysql — сервер #python #mysql
Вопрос:
Я использую dictcursor в MySQL с Python, проблема в том, как я могу получить конкретную запись без необходимости перебирать весь словарь, на самом деле я использую это:
data=cursor.fechall
for item in data:
if item["article"]==articledesc:
do something
break
есть ли способ получить доступ к элементу созданного словаря напрямую, без необходимости перебирать все элементы с помощью цикла for
Спасибо
Ответ №1:
Если вам требуется только одна статья, измените свой запрос, чтобы добавить предложение where:
SELECT ...
FROM ...
WHERE article = %s
Фильтрация результирующего набора, в котором получено больше, чем вам нужно, не является хорошей идеей с точки зрения эффективности.
Если вы извлекаете больший результирующий набор и позже выбираете несколько статей по названию, вы могли бы создать элементарный индекс в своем первом проходе; затем используйте это для эффективного доступа к строкам по имени:
data = cursor.fetchall()
article_index = dict((item["article"], item) for item in data)
article = article_index.get(articledesc)
if article:
#do something
Комментарии:
1. ну, не совсем, потому что мне просто требуется информация из множества элементов
2. @Raul как правило, вам следует выбрать фильтр запросов, который возвращает только интересующие вас строки. Ваш код можно преобразовать в запрос и позволить базе данных делать то, что у нее получается лучше всего.
3. Я добавил альтернативную стратегию для вас
Ответ №2:
Вы можете создать другой словарь не напрямую, но это неявный цикл:
data_article = dict((item['article'], item) for item in data)
и тогда вы сможете получить доступ к данным напрямую:
myitem = dict_article[articledesc]