是否可以从模型创建一个 QuerySet 并在选择中定义一个所有值都等于“0.0”的字段,而不会像使用 QuerySet 那样失去使用查询对象及其字段的能力?联合之后,我想用另一个选择做一个“联合所有”,并计算“计划”和“事实”字段的总和。
除了 RAW 请求之外,还应该考虑哪些其他解决方案?
from django.db.models import Model, ForeignKey, TextField, DecimalField, DateField, CASCADE
class ModelValueMixin(Model):
date = DateField(auto_now=True)
value = DecimalField()
classifier = ForeignKey('Catalog', on_delete=CASCADE)
class Meta:
abstract = True
class ModelValue1(ModelValueMixin):
pass
class ModelValue2(ModelValueMixin):
pass
class Catalog(Model):
code = TextField()
name = TextField()
我如何使用 SQLAlchemy 查看它的示例:
session.query(
ModelValues1.value.label('plan'),
literal_column('0').label('fact'),
ModelCatalog.code.label('code'),
ModelCatalog.name.label('name')
).select_from(ModelValues1).outerjoin(ModelCatalog)
直接在 SQL 中——我是这样看的:
SELECT
"catalog"."id",
"catalog"."code",
"catalog"."full_name",
"values1"."value" AS "plan",
(0) AS "fact"
FROM "catalog"
LEFT OUTER JOIN "values1"
ON (catalog."id" = "values1"."catalog_id")
最终目标是获得一个包含字段“code”、“name”、“sum_plan”、“sum_fact”的数据透视表。
您需要聚合和注释。应该是这样的
在项目中添加了 SQLAlchemy,并在 SQLAlchemy Core 中重写了复杂的查询。
问题已解决 -是的。可以实现小于 100 毫秒的查询执行时间。