Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Models and Migrations and Schemas - oh my!

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

More Decks by Andrew Godwin

Other Decks in Programming

Transcript

  1. Models & Migrations & Models & Migrations & Schemas –

    oh my! Schemas – oh my! Andrew Godwin Andrew Godwin @andrewgodwin @andrewgodwin flickr.com/anders_young flickr.com/anders_young
  2. · Django core dev · Django core dev · South

    · South · Lanyrd · Lanyrd
  3. · 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?
  4. · 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?
  5. 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
  6. · Locks whole tables · Locks whole tables · Hammers

    disk I/O · Hammers disk I/O · Causes inconsistent results · Causes inconsistent results
  7. 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
  8. · Extra fields are fine · Extra fields are fine

    · Missing fields are not · Missing fields are not · Painful/slow to sync · Painful/slow to sync
  9. · South 0.5 · South 0.5 ORM freezing ORM freezing

    Automatic change detection Automatic change detection
  10. · South 0.6 · South 0.6 Field introspection Field introspection

    Dependency solving speed Dependency solving speed
  11. · 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
  12. · 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?
  13. · Mostly stable · Mostly stable Core API hasn't changed

    for 2 years Core API hasn't changed for 2 years
  14. · No rebase/collapse · No rebase/collapse Needs a big change

    to migration tracking Needs a big change to migration tracking
  15. · Opaque migrations · Opaque migrations Impossible to peek inside

    migrations Impossible to peek inside migrations
  16. · 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?
  17. · Database abstraction layer · Database abstraction layer Has no

    idea migrations exist Has no idea migrations exist
  18. 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()
  19. 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()
  20. · No frozen ORM · No frozen ORM Derived from

    the migration history Derived from the migration history
  21. · Raw SQL support · Raw SQL support For those

    with beards For those with beards
  22. · SQL output support · SQL output support For those

    with full-flowing beards For those with full-flowing beards
  23. 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"} )), )), ]) ]) ] ]
  24. · Python 3 support · Python 3 support To coincide

    with Django 1.5 To coincide with Django 1.5
  25. · Will require Python 2.6 · Will require Python 2.6

    As otherwise Python 3 is a PITA As otherwise Python 3 is a PITA
  26. All subject to change! All subject to change! This isn't

    set in stone. This isn't set in stone.
  27. · 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