Saturday, September 27, 2014

Re: Best way to use a 'all' QuerySet as a dict with id first

@James Brewer:
If I change my code, I can have this user_ids list.
btw, it's filter and not get if you're searching multiple objects (the
user_ids).

@Alejandro Varas G.:
That doesn't change the fact that 'User.objects.get(id=X)' will hit the
database everytime.

Right now, the problem is solved, by creating the AllUserSet, but I think my
code is pretty ugly, and it seems strange to me that the ORM can't handle that
built-in, by caching the .all() or .filter(id__in=users_ids)

The ideally solution would be something like:

AllUser = User.objects.all()

for i in user_id:
AllUser.get(id=i)

But this code hits the database every time the 'get' is called.


On 26/09/14 12:36, James Brewer wrote:
> Do you have a single list of the IDs you want? If so, you can do something
> like `User.objects.get(id__in=user_ids)`. This will fetch all Users whose
> `id` is in some list `user_ids`.
>
> Does that help?
>
> Happy hacking!
>
> James
>
> On Fri, Sep 26, 2014 at 11:43 AM, Alejandro Varas G. <alej0varas@gmail.com>
> wrote:
>
> > Hi,
> >
> > You should use User.objects.get(id=X)
> >
> > Best
> > El 26/09/2014 15:28, "aRkadeFR" <contact@arkade.info> escribió:
> >
> > >
> > > Hey!
> > >
> > > I'm having a hard time trying to reduce the number of SQL queries on a
> > view.
> > >
> > > Basically, I'm fetching all my User, with User.objects.all(), and save
> > this
> > > queryset as AllUser.
> > >
> > > Then every time I need to get the user with the id = X , I'm calling a
> > function
> > > 'get_user_from_id', that iterate over the AllUser queryset variable, and
> > when
> > > it finds the id, returns it.
> > >
> > > I considerably reduced the number of SQL queries, but I would like to
> > know if
> > > you think of a better way?
> > >
> > > Thank you
> > >
> > > --
> > > You received this message because you are subscribed to the Google
> > Groups "Django users" group.
> > > To unsubscribe from this group and stop receiving emails from it, send
> > an email to django-users+unsubscribe@googlegroups.com.
> > > To post to this group, send email to django-users@googlegroups.com.
> > > Visit this group at http://groups.google.com/group/django-users.
> > > To view this discussion on the web visit
> > https://groups.google.com/d/msgid/django-users/20140926182939.GA26744%40rkade-thinkpad
> > .
> > > For more options, visit https://groups.google.com/d/optout.
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Django users" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to django-users+unsubscribe@googlegroups.com.
> > To post to this group, send email to django-users@googlegroups.com.
> > Visit this group at http://groups.google.com/group/django-users.
> > To view this discussion on the web visit
> > https://groups.google.com/d/msgid/django-users/CAL60nj%2BBtqs9CXu8drOiWPoJ7aUkAKjLqXKCxmR_TMTeOOH%3DGw%40mail.gmail.com
> > <https://groups.google.com/d/msgid/django-users/CAL60nj%2BBtqs9CXu8drOiWPoJ7aUkAKjLqXKCxmR_TMTeOOH%3DGw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> > .
> >
> > For more options, visit https://groups.google.com/d/optout.
> >
>
>
>
> --
> James Brewer
> jamesbrewer.io
>
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
> To post to this group, send email to django-users@googlegroups.com.
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAKj8pVpqBgpFDQ0BruHXLWe2q1CRURMEejokhMKpD5bfs9hGGA%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/20140927130809.GA3104%40rkade-thinkpad.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment