选择sqlalchemy中作用域方法返回的查询对象的列

时间:2017-02-03 06:20:50

标签: python orm sqlalchemy

我想在rails上创建像ruby这样的范围方法,并为范围方法的结果选择列,如下所示:

class PersonModel(object):

   def __init__(self, session):
       self.session = session

   def male_scope(self):
       query = self.session.query(Person).filter(Person.sex == 'male')
       return query

   def get_male_ids(self):
       results = self.male_scope().query(Person.id).all() #=> this is not correct
       return results

但不能两次调用query()并收到错误:

person = PersonModel(session)
male_ids = person.get_male_ids()

AttributeError: 'Query' object has no attribute 'query'

为范围方法的结果选择列的任何方法? 谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用.with_entities()更改查询的内容列表:

self.male_scope().with_entities(Person.id)