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
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
Reconciling Everything
andrewgodwin
1
400
Django Through The Years
andrewgodwin
0
330
Writing Maintainable Software At Scale
andrewgodwin
0
530
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
430
Async, Python, and the Future
andrewgodwin
2
750
How To Break Django: With Async
andrewgodwin
1
830
Taking Django's ORM Async
andrewgodwin
0
850
The Long Road To Asynchrony
andrewgodwin
0
770
The Scientist & The Engineer
andrewgodwin
1
860
Other Decks in Programming
See All in Programming
テーブルをDELETEした
yuzneri
0
140
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.5k
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
AIが無かった頃の素敵な出会いの話
codmoninc
1
400
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
370
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.1k
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
メールのエイリアス機能を履き違えない
isshinfunada
0
230
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
570
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Thoughts on Productivity
jonyablonski
76
5.3k
For a Future-Friendly Web
brad_frost
183
10k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Cult of Friendly URLs
andyhume
79
7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
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