Hi, I am running a Django app on appengine, but I am constantly hitting the roof with read operations. I have not found an easy way to find what's causing this, so I am trying to find it out myself. To me, it seems that even if I use all().filter(..) or get(), the database is queried for all instances.
I wrote a custom manager like this: class LoggingManager(models.Manager): def get_query_set(self): query_set = super(SignalsManager, self).get_query_set() logging.debug("Got the following queryset from the backend:") logging.debug(query_set) if query_set.count(): key = "num_of_reads_for_" + str(type(query_set[0])) num_of_calls_so_far = memcache.get(key) or 0 num_of_calls_so_far += query_set.count() memcache.delete(key) memcache.add(key, num_of_calls_so_far ) logging.debug("++++++++++++++++++++++++++++++++++") logging.debug("total number of reads for " + key) logging.debug(num_of_calls_so_far) logging.debug("----------------------------------") return query_set I then created a class: class Foo(models.Model): bar = models.CharField(max_length=10) objects = LoggingManager() When I tried this in the shell I got: >>> Foo(bar="Hi").save() >>> Foo(bar="there").save() >>> Foo.objects.get(bar="Hi") DEBUG:root:Got the following queryset from the backend: DEBUG:root:[<Foo: Foo object>, <Foo: Foo object>] DEBUG:root:++++++++++++++++++++++++++++++++++ DEBUG:root:total number of reads for num_of_reads_for_<class 'models.Foo'> DEBUG:root:2 DEBUG:root:---------------------------------- <Foo: Foo object> >>> Foo.objects.all().filter(bar="Hi") DEBUG:root:Got the following queryset from the backend: DEBUG:root:[<Foo: Foo object>, <Foo: Foo object>] DEBUG:root:++++++++++++++++++++++++++++++++++ DEBUG:root:total number of reads for num_of_reads_for_<class 'models.Foo'> DEBUG:root:4 DEBUG:root:---------------------------------- [<Foo: Foo object>] >>> Foo.objects.all().filter(bar="NotExisting") DEBUG:root:Got the following queryset from the backend: DEBUG:root:[<Foo: Foo object>, <Foo: Foo object>] DEBUG:root:++++++++++++++++++++++++++++++++++ DEBUG:root:total number of reads for num_of_reads_for_<class 'models.Foo'> DEBUG:root:6 DEBUG:root:---------------------------------- [] According to the Django documentation, 'the act of creating a QuerySet doesn't involve any database activity'. But since the queryset contains two instances of Foo object when I use the get() method or all().filter(), isn't the database queried for all Foo instances? And then the queryset is filtered? Am I doing something wrong here? Is there a better way to do this? And does anybody know how this would affect App Engines Quote Details, since they have a limit of number of operations? I am using: Python 2.5.1, Django (1, 3, 0, 'alpha', 1) -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.