我在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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)