Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Digging Into Django's Migrations
Search
Andrew Godwin
September 03, 2014
Programming
650
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Digging Into Django's Migrations
My keynote from DjangoCon US 2014
Andrew Godwin
September 03, 2014
Transcript
55 slides
's migrations digging into
Andrew Godwin Author of South migrations library Hi, I'm Author
of 1.7 Django migrations Senior Software Engineer at
south migrations for django south.aeracode.org DjangoCon 2008 https://speakerdeck.com/andrewgodwin/south-migrations-for-django
Migrations: They're pretty good.
South 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0
Aug 2008 Aug 2008 Sep 2008 Jan 2009 Apr 2009 Jun 2009 Mar 2010 May 2013 Jul 2014
The Early Years 0.1 0.2 0.3 0.4 0.5 0.6 0.7
0.8 1.0 Aug 2008 Aug 2008 Sep 2008 Jan 2009 Apr 2009 Jun 2009 Mar 2010 May 2013 Jul 2014
Approaching Stability 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8
1.0 Aug 2008 Aug 2008 Sep 2008 Jan 2009 Apr 2009 Jun 2009 Mar 2010 May 2013 Jul 2014 Well, in the short term, South 1.0 will be released. “ “ June 2010
The Long Gap & Kickstarter 0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 1.0 Aug 2008 Aug 2008 Sep 2008 Jan 2009 Apr 2009 Jun 2009 Mar 2010 May 2013 Jul 2014
Today 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0
Aug 2008 Aug 2008 Sep 2008 Jan 2009 Apr 2009 Jun 2009 Mar 2010 May 2013 Jul 2014
For at least a year now, people have been suggesting
to me that South should be in Django core. “ “ June 2010
The Initial Plan Django Schema backend ORM Hooks South 2
Migration handling User interface
The Revised Plan Django Schema backend ORM Hooks South 2
Migration handling User interface Backport for 1.4 - 1.6
The Revised Revised Plan Django Schema backend ORM Hooks Migration
handling User interface
Moving South into Django instead, "Adding migrations to Django"
Logically Separate SchemaEditor Schema Migrations field.deconstruct() ModelOptions.apps Operations Loader /
Graph Executor Autodetector Optimiser State
Operations & State
Operations are a declarative representation of model changes State is
an in-memory representation of entire project state
State State Operation AddModel No Models 1 Model
State State Operation State Operation State Operation State Operation Migration
1 Migration 2
AddModel DeleteModel RenameModel AddField DeleteField AlterModelOptions RenameField AlterModelTable AlterField AlterUniqueTogether
AlterIndexTogether RunSQL RunPython
SchemaEditor
connection.schema_editor() Abstraction over database DDL Takes Django models and fields
with connection.schema_editor() as ed: ed.create_model(Author) ed.add_field( Book, "author", models.ForeignKey(Author), )
Field Deconstruction
Every field has deconstruct() Returns arguments passed to __init__ to
duplicate itself
>>> field = CharField(max_length=255) >>> field.deconstruct() ( None, 'django.db.models.CharField', [],
{'max_length': 255} )
The Graph
Represents migrations and dependencies as directed graph Loop detection, leaf/root
selection
myapp/0001 myapp/0002 otherapp/0001 contenttypes/0001 appthree/0001 myapp/0003 otherapp/0002
The Autodetector
Compares two States and outputs a set of operations to
perform Operations have own dependencies and resolver
Model A Model A w/FK, Model B diff AddModel(B) AddField(A,
"b", FK(B)) dependency sort AddModel(B) AddField(A, "b", FK(B)) BEFORE AFTER
The Optimiser
Takes one set of Operations and outputs another with the
same effect Steps over pairs and checks if they combine and what they pass over
can't reduce reduce possible check conflicts reduced, reset
A New Format More concise Declarative Introspectable
Migration actions Frozen ORM
None
makemigrations field.deconstruct() Loader / Graph Autodetector Optimiser State Writer 1
2 State 3 5 4
migrate SchemaEditor ModelOptions.apps Operations Loader / Graph Executor State 1
2 Recorder 3
In-memory running Creates models from migration sets Autodetector diffs created
from on-disk Used to feed SchemaEditor / ORM
State State Operation State Operation State Operation State Operation Migration
1 Migration 2 Models Models Render Render
But what went wrong?
Swappable Models
Your migration dependencies myapp/0001 myapp/0002 otherapp/0001 auth/0001 contenttypes/0001
myapp/0001 myapp/0002 otherapp/0001 auth/0001 contenttypes/0001 thirdapp/0001 Your migration dependencies on
swappable models
what? Your migration dependencies on swappable models myapp/0001 myapp/0002 otherapp/0001
auth/0001 contenttypes/0001 thirdapp/0001 ???
what? Your migration dependencies on swappable models myapp/0001 myapp/0002 otherapp/0001
auth/0001 contenttypes/0001 thirdapp/0001 ???
Unmigrated Apps
Test persistence
Test persistence on MySQL
Random Meta options order_with_respect_to? Really?
Proxy Models
But we're there! Django 1.7, out now!
Thanks! Andrew Godwin
[email protected]
More Decks by Andrew Godwin
See All by Andrew Godwin
Working With Risk: Lessons From Mountain Rescue
andrewgodwin
1
35
Reconciling Everything
andrewgodwin
1
430
Django Through The Years
andrewgodwin
0
350
Writing Maintainable Software At Scale
andrewgodwin
0
560
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
450
Async, Python, and the Future
andrewgodwin
2
770
How To Break Django: With Async
andrewgodwin
1
860
Taking Django's ORM Async
andrewgodwin
0
890
The Long Road To Asynchrony
andrewgodwin
0
790
Other Decks in Programming
See All in Programming
AI Augmentation Techniques with Liberty
ivargrimstad
1
460
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.9k
仕様駆動開発入門 (何を作るかを先に決めて渡す) | 目指せ Kiro マスター 05
inariku
PRO
2
130
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
320
Secure Your Coding Agent Like It’s Malware (v1.5) 🇬🇧 @Code.talks 2026
richargh
0
140
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
330
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
170
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
Distance field of Julia set
kinakomoti321
0
320
Spec-driven Development with AI
simas
PRO
0
2.3k
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7.1k
Accessibility Awareness
sabderemane
1
300
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
2
520
A Tale of Four Properties
chriscoyier
163
24k
Music & Morning Musume
bryan
48
7.5k
How STYLIGHT went responsive
nonsquared
100
6.4k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
400
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
330
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k