首页 > 解决方案 > 依靠相关模型作为混合属性

问题描述

我有一个名为 SectionAttempt 的表,其中有很多 QuestionAttempt

我想显示一个计算字段“total_count”,它是 SectionAttempt 的问题尝试次数,而不加载所有 questionAttempts。

上网查了一下,发现是这样的:

select([func.count()],
QuestionAttempt.__table__.c.section_attempt_id==SectionAttempt.__table__.c.id)
.correlate(SectionAttempt.__table__)
.as_scalar()

我不是 100% 确定为什么会这样,但是当我这样查询时它会起作用:

 test_attempt = (SOMEQUERY
                .undefer(SectionAttempt.question_attempt_total_count)).one())

我有问题:

  1. .correlate 在这里做什么。
  2. 它添加到模型的方式使我不得不导入我的 QuestionAttempt 模型,这很容易出现循环导入问题(如果我必须在我的 QuestionAttempt 模型上做类似的事情怎么办)。如何保留功能,但要么更改为基于字符串的引用(就像我们为关系所做的那样),要么在函数内部(以便我可以在函数内部而不是全局导入问题尝试)

标签: mysqlsqlalchemyflask-sqlalchemy

解决方案


推荐阅读