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.

Avatar for Andrew Godwin

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