Ответы пользователя по тегу SQLAlchemy
  • Как получить (сформировать) из БД иерархический справочник?

    @illaaa
    Думаю, структура базы не должна быть какой-то особенной для решение данной задачи. Просто создаем таблицу, заливаем в нее данные (примеры на MS SQL, но думаю, суть будет ясна):
    5dd649fc12102473040510.png

    С помощью Python подключиться к базе не очень сложно, вот ссылка на статью, там довольно доступно объясняется - https://habr.com/ru/post/321510/

    После получения данных из базы, они будут выглядеть примерно так:
    result = [('Moscow', 'Ivanova', '10',) , ('Moscow', 'Ivanova', '13a',) , ('Moscow', 'Ivanova', '2') ......]

    После чего добавляем данные из базы в словарь, из которого потом формируем json с помощью модуля с таким же названием(json).
    Вот скрипт, которым я пользовался (данные немного другие, чем со скриншота, но суть не меняется):
    import json
    import collections as col
    
    
    rows_from_DB = [('Moscow','Lomonosova','14',), ('Moscow','Lomonosova','15a',), ('Omsk','Ivanova','4',), ('Moscow','Kotlyara','7',), ('Sochi','Zhukova','11b',)]
    
    cities = col.defaultdict()
    
    
    for row in rows_from_DB:
        
        if row[0] not in cities:
            cities[row[0]] = col.defaultdict()
            
            
        if row[1] not in cities[row[0]]:
            cities[row[0]][row[1]] = []
           
            
        cities[row[0]][row[1]].append(row[2])
        
        
    print(json.dumps(cities))


    Скрипт далеко не идеальный, думаю, если почитать больше про defaultdict, будет проще его оптимизировать.

    На выходе вот такой json (немного отличается от требуемого, но можно поиграться с модулем, для нужного результата):
    {
    	"Omsk": {
    				"Ivanova": ["4"]
    			}, 
    	"Moscow": {
    				"Kotlyara": ["7"], 
    				"Lomonosova": ["14", "15a"]
    			  }, 
    	"Sochi": {
    				"Zhukova": ["11"]
    			 }
    }
    Ответ написан
    Комментировать