Get a list of values of one column from the results of a query
There is a way to return specific columns from a filter_by
query using the values
method. As follows:
emails = [r[0] for r in db.session.query(my_table).filter_by(name=name).values('email')]
or:
emails = [r[0] for r in User.query.filter_by(name=name).values('email')]
values()
takes any number of field names as parameters and returns a generator that has tuples with each value from each field name. Using a list comprehension to take the first item of that tuple emails
will then be a list of plain string email addresses.
Just to keep a record, I like a wrapper with this function in my common use lib:
def flat_list(l):
return ["%s" % v for v in l]
Then:
flat_list(db.session.query(Model.column_attribute).all())
No, there's not really a way around the fact that SQLAlchemy queries return a list of dicts. If you want a specific set of fields, you can query for just those fields, but if you want a list of one field, you'll have to extract it from the result. The following example gets a list of the unique emails for every user with the given name.
emails = [r.email for r in db.session.query(my_table.c.email).filter_by(name=name).distinct()]