I'm using SQL Alchemy's ORM and I find when I return a single column I get the results like so:
[(result,), (result_2,)] # etc...
With a set like this I find that I have to do this often:
results = [r[0] for r in results] # So that I just have a list of result values
This isn't that "bad" because my result sets are usually small, but if they weren't this could add significant overhead. The biggest thing is I feel it clutters the source, and missing this step is a pretty common error I run into.
Is there any way to avoid this extra step?
A related aside: This behaviour of the orm seems inconvenient in this case, but another case where my result set was, [(id, value)] it ends up like this:
[(result_1_id, result_1_val), (result_2_id, result_2_val)]
I then can just do:
results = dict(results) # so I have a map of id to value
This one has the advantage of making sense as a useful step after returning the results.
Is this really a problem or am I just being a nitpick and the post processing after getting the result set makes sense for both cases? I'm sure we can think of some other common post processing operations to make the result set more usable in the application code. Is there high performance and convenient solutions across the board or is post processing unavoidable, and merely required for varying application usages?
When my application can actually take advantage of the objects that are returned by SQL Alchemy's ORM it seems extremely helpful, but in cases where I can't or don't, not so much. Is this just a common problem of ORMs in general? Am I better off not using the ORM layer in cases like this?
I suppose I should show an example of the actual orm queries I'm talking about:
session.query(OrmObj.column_name).all()
or
session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Of course, in a real query there'd normally be some filters, etc.