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
Database Migrations, South, And You
Search
Andrew Godwin
September 08, 2009
Programming
0
140
Database Migrations, South, And You
A talk I gave at DjangoCon US 2009
Andrew Godwin
September 08, 2009
Tweet
Share
More Decks by Andrew Godwin
See All by Andrew Godwin
Reconciling Everything
andrewgodwin
1
270
Django Through The Years
andrewgodwin
0
170
Writing Maintainable Software At Scale
andrewgodwin
0
400
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
320
Async, Python, and the Future
andrewgodwin
2
620
How To Break Django: With Async
andrewgodwin
1
690
Taking Django's ORM Async
andrewgodwin
0
680
The Long Road To Asynchrony
andrewgodwin
0
600
The Scientist & The Engineer
andrewgodwin
1
710
Other Decks in Programming
See All in Programming
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.3k
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
120
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
130
Immutable ActiveRecord
megane42
0
140
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
120
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
130
楽しく向き合う例外対応
okutsu
0
100
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
390
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
370
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
36
14k
Rails アプリ地図考 Flush Cut
makicamel
1
120
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
GraphQLとの向き合い方2022年版
quramy
44
13k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Side Projects
sachag
452
42k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Language of Interfaces
destraynor
156
24k
Embracing the Ebb and Flow
colly
84
4.6k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Designing Experiences People Love
moore
140
23k
Transcript
database�migrations, southand�you Andrew�Godwin
[email protected]
What�are�migrations? http://www.flickr.com/photos/moonjazz/1216783552/
They're�NOT�moving�data�from� one�database�to�another. http://www.flickr.com/photos/shindotv/3835365427/
Better�name:�Schema�Evolution. http://www.flickr.com/photos/fmc550uz/3562899067/
Django�has�nothing�built-in.
+ + =
+ + = Migration�1:�Creates�table�A Migration�2:�Creates�table�B Migration�3:�Adds�field�to�A, ������������������������creates�t able�C Apply�each�in�order,�get�current�schema
One�set�of�migrations�per�app. http://www.flickr.com/photos/dan_h/2517103627/
Apps�aren't�really�independent. http://www.flickr.com/photos/johnbullas/3301805150/
None
None
Is�your�app�fresh,�or�old? http://www.flickr.com/photos/matthewfch/536763437/
Fresh? -�Populate�appname/models.py -�Make�your�initial�migration: ./manage.py startmigration appname --initial -�Apply�that�migration ./manage.py migrate
appname
Already�syncdb'd? -�Locally,�run: ./manage.py convert_to_south appname -�Commit,�and�then�on�others�do: ./manage.py migrate --fake appname
0001 (see:�south.aeracode.org/wiki/ConvertingAnApp)
Migrations�are�flexible. http://www.flickr.com/photos/dunechaser/2630434670/
Autodetection ./manage.py startmigration \ --auto appname added_some_column Use�the�autodetector Name�of�the�app Suffix�of�the�new�migration
class Migration: def forwards(self, orm): # Adding field 'Adopter.lizard2' db.add_column('southdemo_adopter',
'lizard2', orm['southdemo.adopter:lizard2']) def backwards(self, orm): # Deleting field 'Adopter.lizard2' db.delete_column('southdemo_adopter', 'lizard2_id')
We�'freeze'�model�definitions. http://www.flickr.com/photos/stuckincustoms/3410783929/
models = { 'southdemo.adopter' : { 'first_name': ( 'django.db.models.fields.CharField' ,
[], {'max_length': '50'} ), 'lizard': ( 'django.db.models.fields.related.ForeignKey' , [], { 'related_name' : "'adopters'", 'to': "orm['southdemo.Lizard']" } ), ... }
We�migrate�data,�too. http://www.flickr.com/photos/ian-s/2152798588/
def forwards(self, orm): for adopter in orm.Adopter.objects.all(): try: adopter.first_name, adopter.last_name
= \ adopter.name.split( " ", 1) except ValueError : adopter.first_name, adopter.last_name = \ adopter.name, "" adopter.save()
Roll�your�own�migrations. http://www.flickr.com/photos/thomashawk/93819794/
Unit�test�integration,�if�you�want http://www.flickr.com/photos/cobalt/409924867/
The�Future�World�Of�Tomorrow http://www.flickr.com/photos/stuckincustoms/211566219/
Thanks�for�listening. http://www.flickr.com/photos/sovietuk/378834721/ http://south.aeracode.org Andrew�Godwin
[email protected]
Thanks�for�listening. http://www.flickr.com/photos/sovietuk/378834721/ http://south.aeracode.org Andrew�Godwin
[email protected]
@andrewgodwin