меня запрос возращает некоторый список параметров, и я хочу преобразовать объект алхимии в скажем dict, где ключ - имя колонки, а значение - соотстветсвенно значение
А в чем проблема?
Просто не знаю как привести object алхимии в dict. Из объекта результат получается через response.name например. (name - колонка в БД). При стандартном dict(response) получаю TypeError: cannot convert dictionary update sequence element #0 to a sequence
А как получить список значений из колонки?
Проблему решил, спасибо. Плохо прогуглил вопрос. Кому будет нужно - решение такое. result = await session.execute(statement) result = result.scalars() for x in result: print(x.__dict__)
Ну тут dict(x) будет работать
В том и странность что не сработало.Видимо я что-то упустил
Странно, но нет.Только что проверил. ... for item in result: - то что я обозначал выше. response_list.append(dict(item)) - ошибка TypeError: 'users' object is not iterable Но если response_list.append(item.__dict__) - всё работает.
Я полагаю ты хочешь потом это в JSON преобразовать? Твое решение не работает в общем случае.
Костыль ужасный.
Хм, а как исправить? Задача стояла - из объекта алхимии получить JSON-подобный объект.
Вместо принта - добавление в результирующий список, а так - да.Скорее всего способ гавно но не знаю как лучше
1. написать руками. право же это не сложно. 2. взять например marshmallow-sqlalchemy.
Взять сериализатор, например marshmallow и им преобразовывать.
Хм, спасибо, прогуглю
Спасибо
Немного напрягает необходимость указывать схему, т.к. тогда получается жёсткая привязка к таблице. Не получается обернуть любую выдачу из любой таблицы в JSON-подобный объект.
Можно динамически делать, через обёртку которую Алекс посоветовал. Но отдавать всё содержимое записи всегда это странно.
Пока что я гуглю как в Маршмеллоу сделать динамическую десериализацию, чтобы в одной функции можно было получить схему как для одной таблицы, так и другой.Причём без нужды тянуть в качестве аргумента саму схему. Можешь ли подробнее рассказать, что ты имел ввиду под первым пунктом?Я понимаю что мой вариант с dict то ещё дерьмо, но чем заменить?
{ "field": obj.field, "another_field": obj.another_field }
Обсуждают сегодня