Lunch Talk Series: Swiss Army Django: Small Footprint ETL

Lunch Talk Series: Swiss Army Django: Small Footprint ETL

Articles

Title: Lunch Talk Series: Swiss Army Django: Small Footprint ETL

URL Source: https://www.better-simple.com/lunch-talks/2026/06/26/swiss-army-django/

Published Time: 2026-06-26T00:00:00+00:00

Markdown Content: This iteration of the Lunch Talk Series will be covering Noah Kantrowitz’s multi-tooled DjangoCon US talk, “Swiss Army Django: Small Footprint ETL”. Here are Noah’s slides.

You should watch this if:

  • You’re interested in using Async Django
  • You want to learn more about building robust applications
  • You’re curious how to learn new skills outside of work

This is such a fun talk. Noah provides several code examples that are concise, yet informative. You understand what is being suggested and have a path forward on how to extend it into a fuller system. The style of the slides is wonderful. The font is huge when it can be. The code is readable. There’s jokes in the text. It’s a joy to watch.

Noah provides an introduction to ETL (extract, transform, load), then explains what this typically looks like in Python and Django apps. He dives into the async approaches with Django applications, ending with the point “Async in Django is good.” As the talk progresses, he covers so many cool things:

  • Task factories
  • Modeling for failure
  • Using croniter to detect if a task needs to run
  • Tracking historical changes to models
  • Multi-stage transforms with coroutines
  • GraphQL and Strawberry

I enjoyed listening to him advocate for small projects with everything running in a single application. For his examples, he shows how to do background tasks with coroutines in asyncio. He does point out the existing constraints in the Django ORM for async: - Queries run serially because Django puts them on a background thread. - Transactions require being wrapped in sync_to_async.

The other thing he points out that really stuck out to me was autodiscover_modules(). Noah shows how this can be used to create a decorator is the equivalent to Celery’s task decorator. I didn’t realize I could reuse that functionality!