我的SQLAlchemy结构如下所示
papers2authors_table = Table('papers2authors', Base.metadata, Column('paper_id', Integer, ForeignKey('papers.id')), Column('author_id', Integer, ForeignKey('authors.id')) ) class Paper(Base): __tablename__ = "papers" id = Column(Integer, primary_key=True) title = Column(String) handle = Column(String) authors = relationship("Author", secondary="papers2authors", backref="papers") class Author(Base): __tablename__ = "authors" id = Column(Integer, primary_key=True) name = Column(String, unique=True) code = Column(String, unique=True)
我想查询两件事:
我尝试了func.count()和的许多选择count(),但它们返回的结果毫无意义。如何以SQLAlchemy方式完成这两件事?
func.count()
count()
我尝试了什么
db.s.query(func.count(core.Paper.id)).group_by(core.Author.id).first()
sqlalchemy.exc.OperationalError: (OperationalError) no such column: authors.id
db.s.query(func.count(core.Author.papers)).group_by(core.Author.id).first()
(128100)
db.s.query(core.Author.papers).group_by(core.Author.id).count().first()
AttributeError: 'int' object has no attribute 'first'
找到了解决方案:
db.s.query(core.Paper.title, func.count(core.Author.id)).join(core.Paper.authors).group_by(core.Paper.id).all()
db.s.query(core.Author.name, func.count(core.Author.id)).join(core.Author.papers).group_by(core.Author.id).all()
相关:http : //docs.sqlalchemy.org/en/rel_0_9/orm/query.html#sqlalchemy.orm.query.Query.having