Shelve не выводит сохранённые значения в tkinter
Ребята, прошу помощи с пониманием работы кода. Ситуация вроде довольно простая, использую shelve, чтобы сохранить данные полученные от введения пользователем информации в окна через tkinter. Однако проблема в том, что при попытке закрыть программу и открыть снова - база данных не хочет ничего показывать. Подскажите, в какую сторону копать? Пробовал так писать код:
bd_games = shelve.open('file')
bd_games['value'] = [Name.get(), combobox_Raiting.get(), combobox_Fan.get()]
bd_games.close()
Даже пробовал создавать отдельно список в переменную Lst и через .append добавлял в неё Name.get() и все остальные, потом:
bd_games['value'] = Lst
Результат в итоге один: <shelve.DbfilenameShelf object at 0x0000011E9549C400> при перезапуске программы и попытке прочитать файл bd_games. Пробовал заглядывать в файл .dat - там даже среди краказябр были латинские слова, что я вводил. То есть он сохраняет в двух вариантах кода информацию, тогда почему при перезапуске выдаёт мне эту ерунду?
Ответы (1 шт):
Результат в итоге один: <shelve.DbfilenameShelf object at 0x0000011E9549C400> при перезапуске программы и попытке прочитать файл bd_games.
Я так понял вы просто пытаетесь напечатать сам объект shelve и получаете стандартный вывод питона об этом объекте - его тип и адрес в памяти. Получите из shelve словарь значений и всё нормально напечатается. Пример:
import shelve
with shelve.open('test.tmp') as test:
test['test'] = 'тест'
print(test)
print(dict(test.items()))
Вывод:
<shelve.DbfilenameShelf object at 0x000001A193FAE190>
{'test': 'тест'}
Первый вывод соответствует тому, как смотрите содержимое shelve вы, а второй вывод - это как нужно его смотреть.