为了账号安全,请及时绑定邮箱和手机立即绑定

SQLAlchemy中如何对一对多关系进行COUNT计数?

SQLAlchemy中如何对一对多关系进行COUNT计数?

POPMUISE 2019-02-17 04:20:36
问题描述 我用SQLAlchemy建了一个SQLite数据库来存文献数据,现在我想查每一篇文献的作者数量,作者和文献是分开两张表存的,用文献的识别号来建立联系 我知道用SQL怎么查询,但是现在我想用SQLAlchemy来操作,不使用纯SQL 文献和作者对象的定义代码如下: class WosDocument(Base): __tablename__ = 'wos_document' document_id = Column(Integer, primary_key=True) unique_id = Column(String, unique=True) ...... authors = relationship('WosAuthor', back_populates='document') class WosAuthor(Base): __tablename__ = 'wos_author' author_id = Column(Integer, primary_key=True, autoincrement=True) document_unique_id = Column(String, ForeignKey('wos_document.unique_id')) document = relationship('WosDocument', back_populates='authors') last_name = Column(String) first_name = Column(String) 你期待的结果是什么?实际看到的错误信息又是什么? 我希望查询得到的结果和这个SQL相同,返回每一篇文章的识别号及其作者数 SELECT a.unique_id, COUNT(*) FROM wos_document AS a LEFT JOIN wos_author AS b ON a.unique_id = b.document_unique_id GROUP BY a.unique_id 但是用了ORM之后我可以通过WosDocument.authors来获得一篇文章的全部作者信息,于是我就想是不是能够不使用join也能达到同样的效果?于是我尝试了下面的代码: session.query(WosDocument.unique_id, len(WosDocument.authors)).all() session.query(WosDocument.unique_id, func.count(WosDocument.authors)).all() 第一种方式直接就报错无法执行,第二种方式只返回了一行结果,我也理解不了结果的含义是什么 [('000275510800023', 40685268)] 我想问用SQLAlchemy的正确写法是什么?可以不使用连接查询吗?谢谢大家!
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 1220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信