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
Models and Migrations and Schemas - oh my!
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Andrew Godwin
September 06, 2012
Programming
2.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Models and Migrations and Schemas - oh my!
A talk from DjangoCon US 2012 on South, Django, and schema migrations.
Andrew Godwin
September 06, 2012
More Decks by Andrew Godwin
See All by Andrew Godwin
Working With Risk: Lessons From Mountain Rescue
andrewgodwin
1
26
Reconciling Everything
andrewgodwin
1
420
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
440
Async, Python, and the Future
andrewgodwin
2
770
How To Break Django: With Async
andrewgodwin
1
850
Taking Django's ORM Async
andrewgodwin
0
880
The Long Road To Asynchrony
andrewgodwin
0
790
Other Decks in Programming
See All in Programming
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
190
Railsバージョンを4倍にした話
optim
0
840
Spec-driven Development with AI
simas
PRO
0
2.2k
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
320
Groovy as a human and AI friendly programming language
paulk
0
140
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.1k
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
180
GraphQL の onError と Nullability のこれから
quramy
0
200
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
130
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
6k
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
Next.js: The final boss of Web Performance
guaca
0
370
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
Done Done
chrislema
187
17k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
340
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Utilizing Notion as your number one productivity tool
mfonobong
4
630
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
730
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Raft: Consensus for Rubyists
vanstee
143
7.8k
Building Adaptive Systems
keathley
44
3.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Six Lessons from altMBA
skipperchong
29
4.5k
Transcript
Models & Migrations & Models & Migrations & Schemas –
oh my! Schemas – oh my! Andrew Godwin Andrew Godwin @andrewgodwin @andrewgodwin flickr.com/anders_young flickr.com/anders_young
· Django core dev · Django core dev · South
· South · Lanyrd · Lanyrd
· The Past · The Past django-evolution, south 0.1 django-evolution,
south 0.1 · The Present · The Present south 0.7 south 0.7 · The Future · The Future django 1.6? south 2.0? django 1.6? south 2.0?
· The Past · The Past django-evolution, south 0.1 django-evolution,
south 0.1 · The Present · The Present south 0.7 south 0.7 · The Future · The Future django 1.6? south 2.0? django 1.6? south 2.0?
Databases hate schema changes Databases hate schema changes “ “All
that optimising gone to waste...” All that optimising gone to waste...” flickr.com/96dpi flickr.com/96dpi
· Locks whole tables · Locks whole tables · Hammers
disk I/O · Hammers disk I/O · Causes inconsistent results · Causes inconsistent results
There's a code/schema split There's a code/schema split Your database
is going to ignore git Your database is going to ignore git flickr.com/nataliejohnson flickr.com/nataliejohnson
· Extra fields are fine · Extra fields are fine
· Missing fields are not · Missing fields are not · Painful/slow to sync · Painful/slow to sync
django-evolution django-evolution dmigrations dmigrations
South 0.1 South 0.1
None
None
· South 0.2 · South 0.2 mysql support mysql support
· South 0.3 · South 0.3 dependencies dependencies
· South 0.4 · South 0.4 altering columns altering columns
SQLite SQLite
· South 0.5 · South 0.5 ORM freezing ORM freezing
Automatic change detection Automatic change detection
· South 0.6 · South 0.6 Field introspection Field introspection
Dependency solving speed Dependency solving speed
· South 0.7 · South 0.7 data/schema split data/schema split
missing defaults for NOT NULL missing defaults for NOT NULL multidb multidb custom fields ignored custom fields ignored
· The Past · The Past django-evolution, south 0.1 django-evolution,
south 0.1 · The Present · The Present south 0.7 south 0.7 · The Future · The Future django 1.6? south 2.0? django 1.6? south 2.0?
· Mostly stable · Mostly stable Core API hasn't changed
for 2 years Core API hasn't changed for 2 years
· No rebase/collapse · No rebase/collapse Needs a big change
to migration tracking Needs a big change to migration tracking
· Opaque migrations · Opaque migrations Impossible to peek inside
migrations Impossible to peek inside migrations
· The Past · The Past django-evolution, south 0.1 django-evolution,
south 0.1 · The Present · The Present south 0.7 south 0.7 · The Future · The Future django 1.6? south 2.0? django 1.6? south 2.0?
django.db.backends.schema django.db.backends.schema
· Database abstraction layer · Database abstraction layer Has no
idea migrations exist Has no idea migrations exist
from django.db import connection from django.db import connection editor =
connection.schema_editor() editor = connection.schema_editor() editor.start() editor.start() editor.create_model(Author) editor.create_model(Author) editor.create_model(Book) editor.create_model(Book) editor.commit() editor.commit()
from django.db import connection from django.db import connection editor =
connection.schema_editor() editor = connection.schema_editor() editor.start() editor.start() editor.alter_field( editor.alter_field( Book, Book, CharField(max_length=100, db_index=True), CharField(max_length=100, db_index=True), TextField(), TextField(), ) ) editor.delete_field(Author, ”age”) editor.delete_field(Author, ”age”) editor.commit() editor.commit()
github.com/andrewgodwin/ github.com/andrewgodwin/ django/tree/schema-alteration django/tree/schema-alteration
contrib. contrib.migrations migrations
· Migration creation/running · Migration creation/running Would replace South Would
replace South
· Declarative migrations · Declarative migrations Combinable, optimisable Combinable, optimisable
· No frozen ORM · No frozen ORM Derived from
the migration history Derived from the migration history
· Raw SQL support · Raw SQL support For those
with beards For those with beards
· SQL output support · SQL output support For those
with full-flowing beards For those with full-flowing beards
from migrations.api import * from migrations.api import * class Migration(BaseMigration):
class Migration(BaseMigration): actions = [ actions = [ CreateModel(name = "Author", fields = [ CreateModel(name = "Author", fields = [ ("name", ("name", Field( Field( "django.db.models.fields.CharField", "django.db.models.fields.CharField", [], {"max_length": "100"} [], {"max_length": "100"} )), )), ]) ]) ] ]
github.com/andrewgodwin/migrations/ github.com/andrewgodwin/migrations/ Incomplete and broken code! Incomplete and broken code!
south 1.0 south 1.0
· Python 3 support · Python 3 support To coincide
with Django 1.5 To coincide with Django 1.5
· Will require Python 2.6 · Will require Python 2.6
As otherwise Python 3 is a PITA As otherwise Python 3 is a PITA
All subject to change! All subject to change! This isn't
set in stone. This isn't set in stone.
· Feedback on schema-alt branch · Feedback on schema-alt branch
How to help How to help · Weird and wacky use cases · Weird and wacky use cases · Come talk to me during sprints · Come talk to me during sprints
Questions? Questions? Andrew Godwin / @andrewgodwin Andrew Godwin / @andrewgodwin
flickr.com/oimax flickr.com/oimax