Django (SQL/”Model”) Performance Optimization

Django makes it easy to write code, which performs bad, since it is automatically executing SQL statements when you are handling models. If you don’t know about the details behind that, you can easily end up executing thousands of queries.

def get_books_by_author():
    books = Book.objects.all()
    result = defaultdict(list)    
    for book in books:
        author = book.author
        title_and_author = '{} by {}'.format(
            book.title,
            author.name
        )
        result[book.library_id].append(title_and_author)    return result

This will execute for each book an author query! Which means 1 query for books and n queries for n books!

books = Book.objects.all().select_related('author')

This will add “author” into the Book.objects.all() query and you just execute one query!

However, select_related only works for one-to-many and one-to-one. Many to one relations can be optimized with prefetch_related().

Continue reading “Django (SQL/”Model”) Performance Optimization”

Python/Django development on Windows with WSL

Microsoft offers the WSL feature (Windows Subsystem for Linux) for a couple of years now (since 2016 to be precise). This can be perfectly used for setting up your local development environment. It won’t take much longer than Windows native and comes with more comfort especially when you start to integrate other dependencies like MySQL. Setting up MySQL+Python on Windows is really everything else then nice.

Continue reading “Python/Django development on Windows with WSL”