Peewee:查询 field/column 的 SUM
Peewee: Querying SUM of field/column
我一直在尝试计算 peewee 中 field/column 的总和。我以为这很简单,但我现在已经兜圈子几个小时了。
我只想从查询中返回总价格 field/column。
我一直在使用的代码示例是:
型号
class Package(db.Model):
id = PrimaryKeyField()
code = CharField(max_length=11, unique=True, null=False)
price = DecimalField(null=False, decimal_places=2)
description = TextField()
created = DateTimeField(default=datetime.now, null=False)
updated = DateTimeField(default=datetime.now, null=False)
查询
sum_total = fn.SUM(Package.price).alias('sum_total')
query = (Package
.select(sum_total)
.order_by(sum_total)
)
我得到的输出是:
query.sum_total
AttributeError: 'ModelSelect' object has no attribute 'sum_total'
for q in query:
logger.debug(json.dumps(model_to_dict(q)))
{"code": null, "created": null, "description": null, "id": null, "numberOfTickets": null, "price": null, "updated": null}
我确信我遗漏了一些非常简单的东西。我无法在 peewee 文档之外找到任何示例,我已经尝试过这些示例,但仍然一无所获。
有什么想法吗?
“model_to_dict()”方法并不神奇。它不会自动推断您实际上只想将“sum_total”列转储到字典中。此外,您是否正在尝试获取数据库中 all 行的总和?如果是这样,这只是一个标量值,所以你可以写:
total = Package.select(fn.SUM(Package.price)).scalar()
return {'sum_total': total}
如果您想按其他一些列对总计进行分组,您需要 select 这些列并指定适当的 group_by() - 例如,此按代码对总计进行分组:
sum_total = fn.SUM(Package.price).alias('sum_total')
query = (Package
.select(Package.code, sum_total)
.group_by(Package.code)
.order_by(sum_total))
accum = []
for obj in query:
accum.append({'code': obj.code, 'sum_total': obj.sum_total})
我一直在尝试计算 peewee 中 field/column 的总和。我以为这很简单,但我现在已经兜圈子几个小时了。
我只想从查询中返回总价格 field/column。
我一直在使用的代码示例是:
型号
class Package(db.Model):
id = PrimaryKeyField()
code = CharField(max_length=11, unique=True, null=False)
price = DecimalField(null=False, decimal_places=2)
description = TextField()
created = DateTimeField(default=datetime.now, null=False)
updated = DateTimeField(default=datetime.now, null=False)
查询
sum_total = fn.SUM(Package.price).alias('sum_total')
query = (Package
.select(sum_total)
.order_by(sum_total)
)
我得到的输出是:
query.sum_total
AttributeError: 'ModelSelect' object has no attribute 'sum_total'
for q in query: logger.debug(json.dumps(model_to_dict(q)))
{"code": null, "created": null, "description": null, "id": null, "numberOfTickets": null, "price": null, "updated": null}
我确信我遗漏了一些非常简单的东西。我无法在 peewee 文档之外找到任何示例,我已经尝试过这些示例,但仍然一无所获。
有什么想法吗?
“model_to_dict()”方法并不神奇。它不会自动推断您实际上只想将“sum_total”列转储到字典中。此外,您是否正在尝试获取数据库中 all 行的总和?如果是这样,这只是一个标量值,所以你可以写:
total = Package.select(fn.SUM(Package.price)).scalar()
return {'sum_total': total}
如果您想按其他一些列对总计进行分组,您需要 select 这些列并指定适当的 group_by() - 例如,此按代码对总计进行分组:
sum_total = fn.SUM(Package.price).alias('sum_total')
query = (Package
.select(Package.code, sum_total)
.group_by(Package.code)
.order_by(sum_total))
accum = []
for obj in query:
accum.append({'code': obj.code, 'sum_total': obj.sum_total})