Я использую SQL Alchemy ORM, и я нахожу, когда возвращаю один столбец, я получаю такие результаты:
[(result,), (result_2,)] # etc...
С таким набором я считаю, что я должен делать это часто:
results = [r[0] for r in results] # So that I just have a list of result values
Это не то, что "плохо", потому что мои результирующие наборы, как правило, небольшие, но если бы это было не так, это могло бы добавить значительные накладные расходы. Самое главное, что я чувствую, что это загромождает источник, и пропустить этот шаг - довольно распространенная ошибка, с которой я сталкиваюсь.
Есть ли способ избежать этого дополнительного шага?
Относительно в стороне: это поведение орма кажется неудобным в этом случае, но в другом случае, когда мой результирующий набор был, [(id, value)], он заканчивается следующим образом:
[(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, и пост-обработка после получения набора результатов имеет смысл для обоих случаев? Я уверен, что мы можем думать о некоторых других обычных операциях пост-обработки, чтобы сделать набор результатов более полезным в коде приложения. Есть ли высокая производительность и удобные решения по всем направлениям или неудовлетворительная постпроцессорность и просто требуется для разных применений приложений?
Когда мое приложение действительно может использовать объекты, возвращаемые SQL Alchemy ORM, кажется очень полезным, но в тех случаях, когда я не могу или не могу, не так много. Это просто общая проблема ORM в целом? Мне лучше не использовать слой ORM в таких случаях?
Я предполагаю, что должен показать пример реальных запросов orm, о которых я говорю:
session.query(OrmObj.column_name).all()
или
session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Конечно, в реальном запросе обычно есть некоторые фильтры и т.д.