gpt4 book ai didi

python - 如何使用 SQLAlchemy 计算有或没有连接到父表的子表项目?

转载 作者:行者123 更新时间:2023-12-01 08:24:26 25 4
gpt4 key购买 nike

我使用SQLAlchemy创建了一个SQLite数据库,其中存储一些文档的书目数据,我想查询每个文档的作者编号。

我知道如何在原始 SQL 中执行此操作,但如何使用 SQLAlchemy 获得相同的结果?不使用 join 也是可能的?

这是我定义的类:

    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

我尝试了以下代码:

    session.query(WosDocument.unique_id, len(WosDocument.authors)).all()    session.query(WosDocument.unique_id, func.count(WosDocument.authors)).all()

第一行引发错误,第二行没有给我想要的结果,它只返回一行,我不知道它是什么:

[('000275510800023', 40685268)]

WosDocument对象具有一对多关系authors ,我想我可以查询每个文档的作者编号,而无需使用 join明确地,但我不知道如何使用 SQLAlchemy 来做到这一点。

你能帮我吗?谢谢!

最佳答案

如果您在模型中编写了正确的关系。那么查询将是这样的:

db.session.query(ParentTable.pk,func.count('*').label("count")).join(Childtable).group_by(ParentTable).all()

join()文档的详细信息是 https://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.join

如果您没有明确join(),则需要将诸如parent.relations之类的内容作为字段进行处理。

关于python - 如何使用 SQLAlchemy 计算有或没有连接到父表的子表项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54376147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com