How do I specify the column that I want in my query using a model (it selects all columns by default)? I know how to do this with the sqlalchmey session: session.query(self.col1)
, but how do I do it with with models? I can't do SomeModel.query()
. Is there a way?
This question is related to
python
sqlalchemy
flask-sqlalchemy
As session.query(SomeModel.col1)
returns an array of tuples like this [('value_1',),('value_2',)]
if you want t cast the result to a plain array you can do it by using one of the following statements:
values = [value[0] for value in session.query(SomeModel.col1)]
values = [model.col1 for model in session.query(SomeModel).options(load_only('col1'))]
Result:
['value_1', 'value_2']
You can use load_only function:
from sqlalchemy.orm import load_only
fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()
You can use Query.values, Query.values
session.query(SomeModel).values('id', 'user')
An example here:
movies = Movie.query.filter(Movie.rating != 0).order_by(desc(Movie.rating)).all()
I query the db for movies with rating <> 0, and then I order them by rating with the higest rating first.
Take a look here: Select, Insert, Delete in Flask-SQLAlchemy
session.query().with_entities(SomeModel.col1)
is the same as
session.query(SomeModel.col1)
for alias, we can use .label()
session.query(SomeModel.col1.label('some alias name'))
You can use Model.query
, because the Model
(or usually its base class, especially in cases where declarative extension is used) is assigned Sesssion.query_property
. In this case the Model.query
is equivalent to Session.query(Model)
.
I am not aware of the way to modify the columns returned by the query (except by adding more using add_columns()
).
So your best shot is to use the Session.query(Model.col1, Model.col2, ...)
(as already shown by Salil).
Source: Stackoverflow.com