Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 6

Заполнения словаря в цикле результатами запросов к БД

20.11.2022, 16:54. Показов 962. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет. Пока только изучаю Питон и в роцессе решения одной задачи столкнулся с такой проблемой: написал функцию, выполняющую в цикле запросы к базе. Если какой-то из запросов возвращает результат -- результат нужно записать в словарь. Моя проблема состоит в том, что у меня не получается записать в словарь больше одного результата, т.к. данные я затираю, а хочу добавлять.
Пример моего неправильного кода:

Python
1
2
3
4
5
6
7
8
9
10
11
                 with conn.cursor() as cursor:
                                sql = f"""
                                      SELECT DISTINCT {value};  
                                      """
                                cursor.execute(sql)
                                result = {}
                                for fnc in cursor.fetchall():
                                    if fnc[0] in result.keys():
                                        result[fnc[0]].append(fnc[1])
                                    else:
                                        result[fnc[0]] = fnc[1]
Пример текущего вывода:
["имя таблицы", "данные поля1", "данные поля2", ... "данные поля х"]
И таких строк с результатами у меня должно быть больше 1, но из-за затирания данных--получаю только 1 строку.
Перечитал много статей про словари и пробовал найти похожие примеры, но ничего похожего на мой случай не нашел.
Может кто нибудь помочь с исправлением ошибки в коде?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2022, 16:54
Ответы с готовыми решениями:

Сопоставить методы работы словаря с их результатами
И я больше тут не появлюсь

Как производить вычисления с результатами предыдущих запросов
Так, я в БД новичок, не судите строго. Есть такой код: SELECT department_id, (SELECT COUNT(*) AS NAMBA FROM employee EP WHERE...

Оптимизация кода заполнения класса из словаря
Здравствуйте, реально ли оптимизировать следующий код? код считывает названия полей и их значения и запихивает в соответствующие...

5
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
20.11.2022, 17:09
Лучший ответ Сообщение было отмечено Dzmitry87 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fetch = [
    ["имя таблицы", "данные поля1", "данные поля2", "данные поля х"],
    ["имя таблицы", "данные поля3", "данные поля4", "данные поля 5"],
    ["имя таблицы 2", "данные поля1", "данные поля2", "данные поля х"],
    ["имя таблицы 2", "данные поля4", "данные поля5", "данные поля 6"]
]
 
result = {}
for f in fetch:
    result.setdefault(f[0], []).extend(f[1:])
 
for k, v in result.items():
    print(k)
    print(v)
Code
1
2
3
4
имя таблицы
['данные поля1', 'данные поля2', 'данные поля х', 'данные поля3', 'данные поля4', 'данные поля 5']
имя таблицы 2
['данные поля1', 'данные поля2', 'данные поля х', 'данные поля4', 'данные поля5', 'данные поля 6']
1
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 6
20.11.2022, 18:29  [ТС]
Спасибо за помощь, все работает!
0
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 6
21.11.2022, 15:30  [ТС]
Появился дополнительный вопрос:
Можно ли вывод
print(k)
print(v)
Добавить в переменную, так что бы результат был такой как показан в примере?
имя таблицы
['данные поля1', 'данные поля2', 'данные поля х', 'данные поля3', 'данные поля4', 'данные поля 5']
имя таблицы 2
['данные поля1', 'данные поля2', 'данные поля х', 'данные поля4', 'данные поля5', 'данные поля 6']

Сейчас я вывод передал в словарь и на выходе получаю результат в виде одной строки.

имя таблицы ['данные поля1', 'данные поля2', 'данные поля х', 'данные поля3', 'данные поля4', 'данные поля 5'], имя таблицы 2 ['данные поля1', 'данные поля2', 'данные поля х', 'данные поля4', 'данные поля5', 'данные поля 6']

Я пробовал преобразовать словарь в строку, используя перенос строки, но символ "/n" не определяется как перенос.

Сейчас код у меня выглядит вот так:
Python
1
2
3
4
5
6
  result = {}
                               for f in fetch:
                                   result.setdefault(f[0], []).extend(f[1:])
                               for k, v in result.items():
                                   m_xcom[k] = v   #m_xcom - словарь, который вынес за цикл из которого пытаюсь получить читаемый результат
                                   s = '; '.join(f'{k} {v}' for k, v in m_xcom.items())
Но таким образом я всего лишь разделаю пару ключ-значение от следующей пары.
Попытки использовать в последней строчке \n результата не дали.

Я так заморачиваюсь из-за того, что хочу содержащиеся данные в словаре передавать уведомлением. И что бы уведомление имело читаемый вид--пытаюсь словарь передать в переменную в отформатированном виде.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.11.2022, 16:45
Лучший ответ Сообщение было отмечено Dzmitry87 как решение

Решение

Python
1
2
s = '\n'.join(f'{k}\n{",".join(v)}' for k, v in result.items())
print(s)
1
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 6
21.11.2022, 18:03  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2022, 18:03
Помогаю со студенческими работами здесь

Перебор словаря в цикле
не могу понять, как перебрать все элементы словаря в цикле хочу чтобы по итогу вывелось ключ и значение. di = {1: 2, ...

Уменьшить количество запросов для заполнения формы
Добрый день форумчане. Есть база данных в которой хранится информация о содержимом системного блока (рисунок схемы БД прилагается). ...

Почему в цикле используются квадратные скобки при присвоении словаря?
>>> dict = {} >>> list = >>> for x in range(0,100): ... dict = x ... list.append(dict) ... >>> print...

Отключение автоматического заполнения в цикле for
Как в Delphi сделать так, чтобы сам делфи не заполнял данные цикла for? вот пример того:

Особенности заполнения массивов в цикле с постусловием
Всем доброго времени суток! Собственно вопрос такой. При заполнении массива циклом do { <тело цикла> } ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru