Я использую ORM SQL алхимии, и я нашел, когда я вернусь в одну колонке, я получаю результаты, как так:SQL Алхимия ORM возвращает один столбец, как избежать общей постобработки
[(result,), (result_2,)] # etc...
с набором как это я считаю, что я должен делать это часто:
results = [r[0] for r in results] # So that I just have a list of result values
Это не то, что «плохо», потому что мои наборы результатов, как правило, небольшие, но если они не были это может добавить значительные накладные расходы. Самое главное, что я чувствую, что это загромождает источник, и пропустить этот шаг - довольно распространенная ошибка, с которой я сталкиваюсь.
Есть ли способ избежать этого дополнительного шага?
Связанных в стороне: Такое поведение ОРМА кажется неудобным в этом случае, но другой случай, когда мой результирующий набор был, [(идентификатор, значение)] он заканчивает так:
[(result_1_id, result_1_val), (result_2_id, result_2_val)]
Я тогда может только сделать:
results = dict(results) # so I have a map of id to value
Это преимущество имеет смысл сделать полезный шаг после возвращения результатов.
Действительно ли это проблема, или я просто являюсь nitpick, и после обработки после получения набора результатов имеет смысл для обоих случаев? Я уверен, что мы можем думать о некоторых других обычных операциях пост-обработки, чтобы сделать набор результатов более полезным в коде приложения. Есть ли высокая производительность и удобные решения по всем направлениям или неуправляемость почтовой обработки и просто требуется для разных применений приложений?
Когда мое приложение действительно может воспользоваться объектами, возвращаемыми ORM SQL Alchemy, это кажется чрезвычайно полезным, но в тех случаях, когда я не могу или не хочу, не так много. Это просто общая проблема ORM в целом? Мне лучше не использовать слой ORM в таких случаях?
Я полагаю, я должен показать пример реальных ORM запросов о которых я говорю:
session.query(OrmObj.column_name).all()
или
session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Конечно, в реальном запросе там бы нормально некоторое фильтров и т. д.
Да, я согласен, NamedTuples не сразу очевидны. Моя самая обычная почтовая обработка по-прежнему создает какой-то словарь. Большая часть моей обработки сообщений была устранена с помощью лучшей архитектуры базы данных и использования SQLAlchemy, поэтому у меня есть значения, которые мне нужно привязать к объектам ORM, или доступны с помощью методов. –