словарь python mysql

#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]