【发布时间】:2012-12-12 13:06:07
【问题描述】:
我在 Django 模型管理器中有以下注释,我想将其转换为 SQLAlchemy ORM 查询:
annotations = {
'review_count' : Count("cookbookreview", distinct=True),
'rating' : Avg("cookbookreview__rating")
}
return self.model.objects.annotate(**annotations)
我基本上需要的是查询中的每个模型对象都将review_count 和rating 作为初始查询的一部分附加到它们。我相信我可以使用column_property,但我想避免在对象上使用这种类型的“计算属性”,因为我不希望在访问属性时为每个对象完成属性(昂贵的查找)模板。
解决这个问题的正确方法是什么?提前致谢。
【问题讨论】:
-
恕我直言,Django 注释和聚合是相当不一致的 hack。 SQLAlchemy 比 Django ORM 强大得多,基本上,您以可重用和参数化的方式拥有 SQL 的全部功能。
-
谢谢,但是这里Django ORM聚合/注释的问题需要在SQLAlchemy中解决。由于它非常强大,我认为这种类型的查询可以相对轻松地完成。但我无法弄清楚如何。
-
您可以使用 SqlSoup 映射任何 sqlalchemy.sql.select。
-
如果不是计算属性,它在 Django 中如何工作?
标签: python django sqlalchemy