Models and Migrations and Schemas - oh my!

077e9a0cb34fa3eba2699240c9509717?s=47 Andrew Godwin
September 06, 2012

Models and Migrations and Schemas - oh my!

A talk from DjangoCon US 2012 on South, Django, and schema migrations.

077e9a0cb34fa3eba2699240c9509717?s=128

Andrew Godwin

September 06, 2012
Tweet

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. django-evolution django-evolution dmigrations dmigrations

  10. South 0.1 South 0.1

  11. None
  12. None
  13. · South 0.2 · South 0.2 mysql support mysql support

  14. · South 0.3 · South 0.3 dependencies dependencies

  15. · South 0.4 · South 0.4 altering columns altering columns

    SQLite SQLite
  16. · South 0.5 · South 0.5 ORM freezing ORM freezing

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

    Dependency solving speed Dependency solving speed
  18. · 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
  19. · 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?
  20. · Mostly stable · Mostly stable Core API hasn't changed

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

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

    migrations Impossible to peek inside migrations
  23. · 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?
  24. django.db.backends.schema django.db.backends.schema

  25. · Database abstraction layer · Database abstraction layer Has no

    idea migrations exist Has no idea migrations exist
  26. 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()
  27. 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()
  28. github.com/andrewgodwin/ github.com/andrewgodwin/ django/tree/schema-alteration django/tree/schema-alteration

  29. contrib. contrib.migrations migrations

  30. · Migration creation/running · Migration creation/running Would replace South Would

    replace South
  31. · Declarative migrations · Declarative migrations Combinable, optimisable Combinable, optimisable

  32. · No frozen ORM · No frozen ORM Derived from

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

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

    with full-flowing beards For those with full-flowing beards
  35. 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"} )), )), ]) ]) ] ]
  36. github.com/andrewgodwin/migrations/ github.com/andrewgodwin/migrations/ Incomplete and broken code! Incomplete and broken code!

  37. south 1.0 south 1.0

  38. · Python 3 support · Python 3 support To coincide

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

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

    set in stone. This isn't set in stone.
  41. · 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
  42. Questions? Questions? Andrew Godwin / @andrewgodwin Andrew Godwin / @andrewgodwin

    flickr.com/oimax flickr.com/oimax