Python 如何在不添加更多查询的情况下重用django中的对象?
在下面的代码中,everyPython 如何在不添加更多查询的情况下重用django中的对象?,python,django,Python,Django,在下面的代码中,everyamount=u.filter(email\u icontains=email)django对我的过滤器执行另一个查询,我如何避免这些查询 u = User.objects.all() shares = Share.objects.all() for o in shares: email = o.email type = "CASH" amount = u.filter(email__icontains=email).count() 这
amount=u.filter(email\u icontains=email)
django对我的过滤器执行另一个查询,我如何避免这些查询
u = User.objects.all()
shares = Share.objects.all()
for o in shares:
email = o.email
type = "CASH"
amount = u.filter(email__icontains=email).count()
这整段代码效率很低,更多的上下文可能会有所帮助
- 您需要
做什么u=User.objects.all()
- 调用
会触发查询。通过调用QuerySet.filter()
您只需为要获取的记录集指定一些条件。如果不是通过运行DB查询,您还应该如何获得与您的条件匹配的记录?如果您希望Django不运行DB查询,那么您可能不知道自己在做什么filter()
- 使用
进行过滤效率非常低-数据库无法使用任何索引,您的查询速度将非常慢。你不能用过滤(email=email)来代替它吗过滤器(email\uu icontains=email)
- 在循环中调用一组查询是次优的
所以再说一次,你要做的事情的一些上下文会很有帮助,因为有人可以为你的问题找到更好的解决方案。这整段代码效率很低,多一些上下文可能会有所帮助
- 您需要
做什么u=User.objects.all()
- 调用
会触发查询。通过调用QuerySet.filter()
您只需为要获取的记录集指定一些条件。如果不是通过运行DB查询,您还应该如何获得与您的条件匹配的记录?如果您希望Django不运行DB查询,那么您可能不知道自己在做什么filter()
- 使用
进行过滤效率非常低-数据库无法使用任何索引,您的查询速度将非常慢。你不能用过滤(email=email)来代替它吗过滤器(email\uu icontains=email)
- 在循环中调用一组查询是次优的
所以再说一次-你想做什么的一些上下文会很有帮助,因为有人可以为你的问题找到更好的解决方案。我不明白你为什么需要使用
u
,只需要使用amount=User.objects.filter(email\uu icontains=email)
什么是共享
?这是另一个问题吗?你能演示一下吗?我刚刚添加了共享,当django调用u.filter时,它不使用User.objects.all()中的对象,而是调用另一个查询,每次循环运行时查询的数量都会增加,请帮助我。我不明白你为什么需要使用u
,只需使用amount=User.objects.filter即可(email\uu icontains=email)
什么是共享
?这是另一个查询吗?你能显示吗?我刚刚添加了共享,当django调用u.filter时,它不使用User.objects.all()中的对象,而是调用另一个查询,每次循环运行时,查询数量都会增加,请帮助