如何在Django 1.9中将​​更新连接postgres查询写为queryset?

如何在Django 1.9中将​​更新连接postgres查询写为queryset?,第1张

概述情况 我在Postgres 9.5中有以下查询. update warehouse_shelf set package_count = counter.resultfrom ( select count(id) as result, shelf_id from warehouse_package group by shelf_id) counterwhere 情况

我在Postgres 9.5中有以下查询.

update warehouse_shelf  set package_count = counter.resultfrom (    select count(ID) as result,shelf_ID     from warehouse_package     group by shelf_ID) counterwhere counter.shelf_ID = warehouse_shelf.ID;

这些是我的表.

warehouse_shelf+----+------+---------------+| ID | name | PACKAGE_COUNT |+----+------+---------------+|  1 | S1   |             3 ||  2 | S2   |             1 ||  3 | S3   |             0 |+----+------+---------------+warehouse_package+----+------+---------------+| ID | name | SHELF_ID      |+----+------+---------------+|  1 | P1   |             1 ||  2 | P2   |             1 ||  3 | P3   |             1 ||  4 | P4   |             2 |+----+------+---------------+

每当我通过django模型对单个包进行更改(例如保存,删除,创建,更新等)时,如何执行上述查询?

我希望尽可能使用django queryset执行,并避免将其作为原始查询执行.

解决方法 考虑到你有模型和他们的外键关系:

from django.db.models import Count shelves = WhShelf.objects.all()      for shelf in shelves:      count = WhPackage.objects.filter(shelf_ID=shelf.ID).aggregate(Count('shelf'))      shelf.update(package_count=count[shelf__count'])

在Alterantive中,您可以运行单个查询:

WhShelf.objects.annotate(package_count=WhPackage.objects.                filter(shelf_ID=shelf.ID).aggregate(Count('shelf'))['shelf__count'])
总结

以上是内存溢出为你收集整理的如何在Django 1.9中将​​更新连接postgres查询写为queryset?全部内容,希望文章能够帮你解决如何在Django 1.9中将​​更新连接postgres查询写为queryset?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存