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
South New and Old
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Andrew Godwin
May 25, 2010
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
South New and Old
A talk I gave at DjangoCon Europe 2010
Andrew Godwin
May 25, 2010
More Decks by Andrew Godwin
See All by Andrew Godwin
Reconciling Everything
andrewgodwin
1
390
Django Through The Years
andrewgodwin
0
310
Writing Maintainable Software At Scale
andrewgodwin
0
520
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
420
Async, Python, and the Future
andrewgodwin
2
740
How To Break Django: With Async
andrewgodwin
1
810
Taking Django's ORM Async
andrewgodwin
0
840
The Long Road To Asynchrony
andrewgodwin
0
760
The Scientist & The Engineer
andrewgodwin
1
850
Other Decks in Programming
See All in Programming
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
570
Creating Composable Callables in Contemporary C++
rollbear
0
110
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
120
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
390
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
160
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.1k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
220
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.5k
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
220
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
140
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Balancing Empowerment & Direction
lara
6
1.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Believing is Seeing
oripsolob
1
140
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
The agentic SEO stack - context over prompts
schlessera
0
820
Producing Creativity
orderedlist
PRO
348
40k
Transcript
new and old south Andrew Godwin djangocon.eu 2010
It's been almost 2 years. Lots has happened.
Migrations? Eh? A bit like a VCS, but for database
schemas.
The Beginning
1-make_tables.sql 2-add_profile.sql
YOU ARE AT VERSION 2 1-make_tables.sql 2-add_profile.sql
1-make_tables.sql 2-add_profile.sql 3-remove_pony.sql 1-make_tables.sql 2-add_profile.sql 4-add_postcode.sql
1-make_tables.sql 2-add_profile.sql 3-remove_pony.sql 1-make_tables.sql 2-add_profile.sql 4-add_postcode.sql YOU ARE AT VERSION
3 YOU ARE AT VERSION 4
1-make_tables.sql 2-add_profile.sql 3-remove_pony.sql 1-make_tables.sql 2-add_profile.sql 4-add_postcode.sql YOU ARE AT VERSION
3 YOU ARE AT VERSION 4 3-remove_pony.sql 4-add_postcode.sql
Oracle MySQL PostgreSQL MSSQL SQLite
The Early Days
Adding tables Deleting tables Everything else useful
3-remove_pony.sql 1-make_tables.sql 2-add_profile.sql 4-add_postcode.sql
Uh-oh, publicity
Closing this, as it's unlikely we'll write a model history
tracker in the near future, and django-evolution does this well - no need to reinvent the wheel in that area. “ “
Feature Creep (of the good sort)
start_field_re = re.compile(r'\s*%s\s*=\s*(.*)' % field.name) for line in source[0]: #
if the field was found during a previous iteration, # we're here because the field spans across multiple lines # append the current line and try again
cms.0001_initial cms.0002_auto_start picture.0001_initial file.0001_initial flash.0001_initial link.0001_initial snippet.0001_initial video.0001_initial twitter.0001_initial cms.0003_remove_placeholder
cms.0004_textobjects cms.0005_mptt_added_to_plugins cms.0006_apphook text.0001_initial cms.0007_apphook_longer cms.0008_redirects cms.0009_added_meta_fields cms.0010_5char_language cms.0011_title_overwrites cms.0012_publisher cms.0013_site_copy file.0003_publisher text.0003_publisher picture.0004_publisher googlemap.0001_initial link.0005_publisher flash.0003_publisher snippet.0002_publisher cms.0014_sites_removed cms.0015_modified_by_added cms.0016_author_copy cms.0017_author_removed cms.0018_site_permissions cms.0019_public_table_renames file.0004_table_rename cms.0020_advanced_permissions picture.0006_float_added teaser.0001_initial text.0004_table_rename flash.0004_table_rename link.0006_table_rename snippet.0003_table_rename googlemap.0002_table_rename picture.0005_table_rename cms.0021_publisher2 picture.0007_publisher2 cms.0022_login_required_added teaser.0002_publisher2 cms.0023_plugin_table_naming_function_changed text.0002_freeze text.0005_publisher2 picture.0002_link_rename picture.0003_freeze picture.0008_longdesc_added file.0002_freeze file.0005_publisher2 flash.0002_freeze flash.0005_publisher2 link.0002_link_rename link.0003_page_link link.0004_larger_link_names link.0007_publisher2 link.0008_mailto snippet.0004_publisher2 snippet.0005_template_added googlemap.0006_publisher2 googlemap.0007_latlng googlemap.0008_routeplaner googlemap.0009_routeplaner_title video.0002_color_mute_controller video.0003_newplayer_step1 video.0004_newplayer_step2 video.0005_newplayer_step3 video.0006_newplayer_step4 video.0007_newplayer_step5 inherit.0001_initial inherit.0002_fieldchanges
Model Freezing
Historical ORM access Automatic change detection ‘Improved’ model parsing
Sanity Dawns
Introspection Magically supports custom fields Prevents hideous migration failure
SQLite Make new table Copy data from old table Delete
old table Rename new table
Signals Speed Simplicity
1.0
MultiDB? Non-relational? Renames!
Organic Growth But it's still cleanly separated
Database Backend Dependency/ Ordering Engine Migration Runner Auto- detector
The Future
Database Backend Dependency/ Ordering Engine South in future ??? Migration
Runner Auto- detector
The Ultimate Goal
Andrew Godwin Fin. www.aeracode.org @andrewgodwin
Andrew Godwin Fin. www.aeracode.org @andrewgodwin