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

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2019, 16:49
Ответы с готовыми решениями:

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

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

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

Ошибка при обработке 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...

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

13
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
19.02.2019, 17:04 2
Цитата Сообщение от Эникей Посмотреть сообщение
У меня вылетает ошибка.
Вы бы ошибку написали.

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

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

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

Добавлено через 30 секунд
А, точно, сорри. По привычке db.Model ассоциируется с джангой.
Вероятно, ругается на db.relationship, но тут уже копать надо, как обойти это ограничение.
Так что мне делать? Может быть руками собирать файл json? Будет не очень красиво, зато всё будет работать))
Может глянете код? Я не понимаю, что за фигня здесь творится.
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
19.02.2019, 18:35 6
Не, при придётся ставить кучу всего.
Гуглить, чо Сперва доку https://wakatime.com/blog/32-f... ls-to-json (внизу, Relationships).
Потом всё остальное.
1
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
19.02.2019, 19:08  [ТС] 7
Хорошо, спасибо.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
23.02.2019, 02:33 8
Эникей, кажется вы marshmallow искали.
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
25.02.2019, 13:16 9
outoftime, вангую, что marshmallow выдаст то же самое.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
26.02.2019, 13:51 10
dondublon, перед тем как давать диванные комменты, посмотри хотябы главную страницу докумментации, там явно написано что сериализатор надо писать руками, marshmallow просто в более удобном виде всё это делает, структурировано и т.д.
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
26.02.2019, 13:59 11
outoftime, я прошу вас не хамить.
"Сериализатор надо писать руками" - это и значит, что marshmallow не поможет от указанной проблемы.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
26.02.2019, 15:28 12
Цитата Сообщение от Эникей Посмотреть сообщение
Как мне вообще получить данные из БД и загнать их в json?
Цитата Сообщение от dondublon Посмотреть сообщение
"Сериализатор надо писать руками" - это и значит, что marshmallow не поможет от указанной проблемы.
У нас с вами разные проблемы. С учётом того, что для сериализации написали библиотеку, рискну предположить что другие варианты помимо "написания сериализатора руками" не подходят по разным причинам.
0
1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
26.02.2019, 23:39  [ТС] 13
Да решил я уже эту проблему, написал руками) Теперь у меня появились другие проблемы)
0
33 / 1 / 0
Регистрация: 30.06.2016
Сообщений: 85
22.10.2020, 12:00 14
Используя marshmallow и Nested
Что-то вроде этого
menu= fields.List(fields.Nested(l"MenuSchema")
0
22.10.2020, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2020, 12:00
Помогаю со студенческими работами здесь

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

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

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

Flask-SQLAlchemy One to Many
Есть 2 модели: class Citizen(db.Model): import_id = db.Column(db.Integer,...

Flask-sqlalchemy many-to-many relationship
Имеется 3 таблицы: User, Phone, Subdivision и связующая таблица us_ph_sub. Все они связаны...

Как создать БД посредством SqlAlchemy во Flask
Добрый день. так и не могу создать бд посредством SqlAlchemy :\ ошибка raise...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru