Sqlalchemy FIlter基于子类型

时间:2016-04-17 10:27:12

标签: python sqlalchemy flask-sqlalchemy

我正在使用基于联接的继承 - 我有User(父)和CorporateUser(子)模型。用户的polymorphic_identity为"user",而CorporateUser的多态为"corporate_user"
我有这样的查询 User.query.filter(User.name.like("%"+search_text+"%"))
是否可以“链接”到此查询只会返回CorporateUser类型的对象的内容? 目前我只是添加了另一个User.query.filter(User.name.like("%"+search_text+"%")).filter(User.type == 'corporate_user') 但这似乎并不优雅。

我知道我可以做CorporateUser.query.filter(User.name.like("%"+search_text+"%"))
但重点是我得到了初始查询的过滤器。

感谢。

1 个答案:

答案 0 :(得分:0)

.with_entities()可以帮到你。它不会完全返回CorporateUser,而只返回您定义的字段。

query = User.query.filter(User.name.like("%"+search_text+"%")) \
    .filter(User.type == 'corporate_user') \
    .with_entities(User.corporate_user)

查询结果中的每个项目都是定义了实体的元组。

当然,您的模型需要User.corporate_user后退参考。根据您的问题,我不确定您是否拥有它。