Count and Group by in SQLAlchemy ORM Query
Jul 8, 2024
I have 2 Objects
class Post(Base):
__tablename__ = "post"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = mapped_column(Integer, ForeignKey("user.id"))
content = Column(String(255),nullable=False)
created_date = Column(TIMESTAMP(timezone=False), nullable=False, default=datetime.now())
updated_date = Column(TIMESTAMP(timezone=False), nullable=False, default=datetime.now())
class Like(Base):
__tablename__ = "like"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = mapped_column(Integer, ForeignKey("user.id"))
post_id = mapped_column(Integer, ForeignKey("post.id"))
created_date = Column(TIMESTAMP(timezone=False), nullable=False, default=datetime.now())
updated_date = Column(TIMESTAMP(timezone=False), nullable=False, default=datetime.now())
Now my aim is to find the number of likes for each post.
Here is how to do it.
from sqlalchemy import func
result = db_session.query(Post.id,Post.content,Post.created_date,func.count(Like.id)).join(Like,isouter=True).group_by(Post.id).all()