Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Models and Migrations and Schemas - oh my!
Search
Andrew Godwin
September 06, 2012
Programming
5
2k
Models and Migrations and Schemas - oh my!
A talk from DjangoCon US 2012 on South, Django, and schema migrations.
Andrew Godwin
September 06, 2012
Tweet
Share
More Decks by Andrew Godwin
See All by Andrew Godwin
Reconciling Everything
andrewgodwin
1
360
Django Through The Years
andrewgodwin
0
280
Writing Maintainable Software At Scale
andrewgodwin
0
490
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
390
Async, Python, and the Future
andrewgodwin
2
710
How To Break Django: With Async
andrewgodwin
1
770
Taking Django's ORM Async
andrewgodwin
0
770
The Long Road To Asynchrony
andrewgodwin
0
740
The Scientist & The Engineer
andrewgodwin
1
810
Other Decks in Programming
See All in Programming
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
Package Management Learnings from Homebrew
mikemcquaid
0
230
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
AI時代の認知負荷との向き合い方
optfit
0
170
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
AtCoder Conference 2025
shindannin
0
1.1k
SourceGeneratorのススメ
htkym
0
200
Oxlint JS plugins
kazupon
1
1k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
4k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
Featured
See All Featured
A better future with KSS
kneath
240
18k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
190
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Unsuck your backbone
ammeep
671
58k
Design in an AI World
tapps
0
150
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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