Articles Tagged sql
Task: for every object count number of related objects satisfying some conditions.
class Category(models.Model): title = models.CharField(max_length=50) class Article(models.Model): title = models.CharField(max_length=50) category = models.ForeignKey(Category) approved_at = models.DateTimeField(blank=True, null=True)
Pay attention at field
Article.approved_at, it contains article approval time and it can be null.
Create test data:
from django.utils import timezone c1 = Category.objects.create(title='c1') c2 = Category.objects ...
New JSONField will be added in Django 1.9, it can be used with PostgreSQL >= 9.4. Let's try to work with it and find out, in what situations it can be useful.
Currently django 1.9 alpha is available, final version is scheduled on December 2015. Alpha can be installed with pip:
pip install --pre django
Now imagine that we have an e-commerce site, where we offer products of different types. For example ...
In django tests we can measure number of sql queries:
def test_home(self): with self.assertNumQueries(1): response = self.client.get('/') self.assertEqual(response.status_code, 200)
If code in context of
assertNumQueries will make other number of DB attempts than expected (here 1), test will throw error. But when test fails it is sometimes hard to understand, what unexpected query was made. To debug such case very useful to log SQL expressions to console. Below ...
Did you know, that Django ORM can do nested SQL queries? Shame on me, but i've found it not so long ago.
So, lets say we have such models of Nursery and Pet:
class Nursery(models.Model): title = models.CharField(max_length=50) class Pet(models.Model): name = models.CharField(max_length=50) nursery = models.ForeignKey(Nursery, related_name='pets')
We need to get all pets, that are placed in given nurseries. For example, in nurseries with ...
Once i mentioned, that my django application makes several similiar queries like 'SELECT COUNT(*) ...'. As it turns out (for me it was surprise),
queryset.count() has not obvious cache. But let me start the story from the beginning (and sorry for my english :) ).
As it is known, django's
queryset is lazy and have cache.
Lets say we have such model:
class Item(models.Model): name = models.CharField(max_length=50)
When some django query is ...
It is known, that less amount of database attempts leads to better performance. Usually admin page - part of site with low traffic, but anyway it is good, if no additional database calls happen there. It is more pleasant to use it, because page renders faster and also frees server resources.
In this post i'll try to reduce some database attempts in admin page, when model method
__unicode__ contains related object field. I suppose, that ...