Форум программистов, компьютерный форум, киберфорум
Python: Flask
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101

Flask и SQLAlchemy и JSON. Не получается преобразовать результат запроса в json

19.02.2019, 16:49. Показов 5540. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть БД построенная из этих моделей с помощью миграций:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Class Class stores info about dish categories
class Class(db.Model):
    class_id = db.Column(db.BigInteger, primary_key=True)
    name = db.Column(db.String(64))
    menu = db.relationship('Menu', backref='Class', lazy='dynamic')
 
 
# Class Menu stores info about menu items
class Menu(db.Model):
    item_id = db.Column(db.BigInteger, primary_key=True)
    class_id = db.Column(db.BigInteger, db.ForeignKey(Class.class_id))
    name = db.Column(db.String(128))
    price = db.Column(db.Float)
    photo = db.Column(db.Text)
    is_alive = db.Column(db.Boolean, default=False)
То есть, есть категория блюда (суп, салат и тд) и есть сами блюда. Связь - один-ко-многим.

Мне нужно написать код, который будет выдавать на клиент json-файл какой-то такой структуры:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{"class_id":"1",
  "name":"Салаты",
  "menu":"[{"item_id":"1",
               "name":"Салат овощной",
               ...}...]
},
{"class_id":"2",
  "name":"Супы",
  "menu":"[{"item_id":"1",
               "name":"Суп рыбный",
               ...}...]
},....
]
Вот примерно такой json должен получиться. То есть идет категория - потом куча блюд из этой категории, потом снова категория - и снова куча блюд.

Но у меня никак не получается из БД получить это всё. Я делаю так:

Python
1
2
3
4
5
6
7
@app.route('/get_menu', methods=['GET'])
def get_menu():
    if request.method == 'GET':
        food_class = Class.query.all()
        menu_items = []
        for food in food_class:
            menu.append(food.menu)

Но потом, при попытке вызова функции
Python
1
result = jsonify(food_class)
У меня вылетает ошибка.


Что я делаю не так? Как мне вообще получить данные из БД и загнать их в json?
Тысячу способов уже перепробовал - ни один не подошел.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2019, 16:49
Ответы с готовыми решениями:

Прием json-объекта | Flask, Flask-Security, Telegram-bot
Здравствуйте, помогите , пожалуйста, Flask знаю не очень, но что-то смог, писал бота с бд и админкой, на вебхуке, но после того, как...

Как вывести JSON результат API запроса в textbox?
Как вывести результат API запроса (значение ui_bid) в textbox ? using System; using System.Collections.Generic; using...

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

13
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
19.02.2019, 17:04
Цитата Сообщение от Эникей Посмотреть сообщение
У меня вылетает ошибка.
Вы бы ошибку написали.

Что за метод jsonify? Вообще есть такая штука, как Django rest framework. С ней будет проще. Можно, конечно, и вручную всё делать, но зачем изобретать свой велосипед?
0
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
19.02.2019, 17:08  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Вы бы ошибку написали.

Что за метод jsonify? Вообще есть такая штука, как Django rest framework. С ней будет проще. Можно, конечно, и вручную всё делать, но зачем изобретать свой велосипед?
Проблема в том, что я использую не Django, а Flask и мне интересно, как в Flask можно это сделать. А ошибки у меня появляются всякие разные. Конкретно для того кода который я написал - ошибка "list food_class is not serialisible".
Уже перепробовал всё что можно было - нифига не получается.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
19.02.2019, 18:15
А, точно, сорри. По привычке db.Model ассоциируется с джангой.
Вероятно, ругается на db.relationship, но тут уже копать надо, как обойти это ограничение.

Добавлено через 30 секунд
А, точно, сорри. По привычке db.Model ассоциируется с джангой.
Вероятно, ругается на db.relationship, но тут уже копать надо, как обойти это ограничение.
0
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
19.02.2019, 18:25  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
А, точно, сорри. По привычке db.Model ассоциируется с джангой.
Вероятно, ругается на db.relationship, но тут уже копать надо, как обойти это ограничение.

Добавлено через 30 секунд
А, точно, сорри. По привычке db.Model ассоциируется с джангой.
Вероятно, ругается на db.relationship, но тут уже копать надо, как обойти это ограничение.
Так что мне делать? Может быть руками собирать файл json? Будет не очень красиво, зато всё будет работать))
Может глянете код? Я не понимаю, что за фигня здесь творится.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
19.02.2019, 18:35
Не, при придётся ставить кучу всего.
Гуглить, чо Сперва доку https://wakatime.com/blog/32-f... ls-to-json (внизу, Relationships).
Потом всё остальное.
1
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
19.02.2019, 19:08  [ТС]
Хорошо, спасибо.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
23.02.2019, 02:33
Эникей, кажется вы marshmallow искали.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
25.02.2019, 13:16
outoftime, вангую, что marshmallow выдаст то же самое.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
26.02.2019, 13:51
dondublon, перед тем как давать диванные комменты, посмотри хотябы главную страницу докумментации, там явно написано что сериализатор надо писать руками, marshmallow просто в более удобном виде всё это делает, структурировано и т.д.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
26.02.2019, 13:59
outoftime, я прошу вас не хамить.
"Сериализатор надо писать руками" - это и значит, что marshmallow не поможет от указанной проблемы.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
26.02.2019, 15:28
Цитата Сообщение от Эникей Посмотреть сообщение
Как мне вообще получить данные из БД и загнать их в json?
Цитата Сообщение от dondublon Посмотреть сообщение
"Сериализатор надо писать руками" - это и значит, что marshmallow не поможет от указанной проблемы.
У нас с вами разные проблемы. С учётом того, что для сериализации написали библиотеку, рискну предположить что другие варианты помимо "написания сериализатора руками" не подходят по разным причинам.
0
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
26.02.2019, 23:39  [ТС]
Да решил я уже эту проблему, написал руками) Теперь у меня появились другие проблемы)
0
36 / 3 / 1
Регистрация: 30.06.2016
Сообщений: 93
22.10.2020, 12:00
Используя marshmallow и Nested
Что-то вроде этого
menu= fields.List(fields.Nested(l"MenuSchema")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2020, 12:00
Помогаю со студенческими работами здесь

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Дополнительные сведения: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1'...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException'...

Не работает модуль json (функции json.dump(), json.load()
При запуске кода по сохранению и прочтению данных, сгенерированных пользователем: import json def get_stored_username(): ...

Как включить JSON-RPC во Flask?
Доброго времени суток. Использую flask. Помогите пожалуйста как мне реализовать вот такой php код используя flask и python <?php ...

Ошибка при переводе сайта json -> Flask
Пытаюсь, сделать перевод по клику, но у Microsoft поменялись методике и в новой возникает проблема при отправке json Фласк не возвращает...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru