如何使用group_by在sqlalchemy中访问“计数”值作为dict / property?

时间:2019-05-15 22:57:24

标签: python sqlalchemy

我正在使用ORM SQLAlchemy进行非常简单的查询,在该查询中,我希望获得一个列(类型)以及每个值(countgroup by)的出现情况。

我可以通过访问type对象上的type属性来访问server列(如提供的代码所示)。

我还可以通过访问count对象上的索引0来访问server列。

我的问题是:是否有一种简单的方法来将dict / property作为访问count列的方法?例如:server.count

我已经使用server广泛检查了dir()对象,但是找不到任何可以返回count值的属性。

class Server(Base):
    __tablename__ = 'servers'

    id = Column(Integer, primary_key=True)
    type = Column(String)
    method = Column(String)

    def __repr__(self):
        return "<Server(type='%s', method='%s')>" % (self.type, self.method)

session = Session()

servers = session.query(func.count(Server.type), Server.type).group_by(Server.type).all()

for server in servers:
    print(server[0], server.type)

1 个答案:

答案 0 :(得分:0)

重新阅读the official ORM tutorial

后找到了我问题的答案

我要做的就是为我的班级中没有相应属性的列设置标签。

所以,不要这样做:

servers = session.query(func.count(Server.type), Server.type).group_by(Server.type).all()

我应该这样做:

servers = session.query(func.count(Server.type).label('total_count'), Server.type).group_by(Server.type).all()

然后我可以访问total_count属性(由label函数提供):

for server in servers:
    print(server.type, server.total_count)