I am making a very simple query using ORM SQLAlchemy, in which I expect to get a column (type) as well as its occurences for each value (count
with group by
).
I can access the type
column by accessing the type
property on the server
object (as shown in the code provided).
I can also access the count
column by accessing the index 0 on the server
object.
My question is: is there a simple way to access the count
column as a dict/property? For example: server.count
I’ve extensively inspected the server
object using dir()
, but I couldn’t find any properties that would return the count
value.
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)
Advertisement
Answer
Found the answer to my question after re-reading the official ORM tutorial
All I need to do is to set a label for the column for which there’s no corresponding property in my class.
So, instead of doing this:
servers = session.query(func.count(Server.type), Server.type).group_by(Server.type).all()
I should do that:
servers = session.query(func.count(Server.type).label('total_count'), Server.type).group_by(Server.type).all()
Then I can access the total_count
property (provided by the label
function):
for server in servers: print(server.type, server.total_count)