关于python:Flask SQLAlchemy查询,指定列名

Flask SQLAlchemy query, specify column names

如何使用模型在查询中指定所需的列(默认情况下会选择所有列)? 我知道如何使用sqlalchmey会话:session.query(self.col1),但是如何使用模型呢? 我不能做SomeModel.query()。 有办法吗?


您可以使用with_entities()方法来限制要在结果中返回的列。 (文档)

1
result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)

根据您的要求,您可能还会发现递延有用。它们使您可以返回完整的对象,但可以限制导线上的列。


1
session.query().with_entities(SomeModel.col1)

是相同的

1
session.query(SomeModel.col1)

对于别名,我们可以使用.label()

1
session.query(SomeModel.col1.label('some alias name'))


您可以使用load_only函数:

1
2
3
4
from sqlalchemy.orm import load_only

fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()


您可以使用Model.query,因为Model(或者通常是它的基类,尤其是在使用声明性扩展的情况下)被分配了Sesssion.query_property。在这种情况下,Model.query等效于Session.query(Model)

我不知道修改查询返回的列的方法(除非使用add_columns()添加更多列)。
因此,最好的选择是使用Session.query(Model.col1, Model.col2, ...)(如Salil所示)。


这里的一个例子:

1
movies = Movie.query.filter(Movie.rating != 0).order_by(desc(Movie.rating)).all()

我在数据库中查询评级为<> 0的电影,然后我首先以最高评级对它们进行评级。

在这里看看:在Flask-SQLAlchemy中选择,插入,删除