Django 1.7の新機能Migrations

公開日: : Python ,


Django 1.6まででは作成後のモデルに変更を加える場合、手動でSQLを発行するかsouthのような外部ツールを使用する必要がありました。
ですがDjango 1.7からMigrationsと呼ばれる新機能でモデルへの変更をDBスキーマに反映できるようになりました。
今までsouthも触ったことが無かったのでこの機会にmigrationsを試してみました。

syncdbからmigrateへ

1.7からはsyncdbコマンドがdeprecatedとなりmigrateコマンドに置き換わります。(1.7リリースノート
なので新しいappを追加した際にもmigrateコマンドで反映できます。
syncdbコマンドも当面は使えるようです。

migrationファイルの作成

モデルに変更を加えた際はまずmakemigrationsコマンドを実行し、migrationファイルを作成します。

[appディレクトリ]/migrations以下にmigrationファイルが作成されるので変更通りか確認します。(複雑な変更は取りこぼすこともあるようです)
デフォルト値の無いフィールドを追加しようとすると、以下のように既存レコードに設定するための一時的なデフォルト値を入力するか中止するか選ばされます。

一時的デフォルト値を入力する場合、pythonコードを求められるので””や0などと入力します。

migrate実行

makemigrationsで作ったmigrationファイルをDBスキーマに反映するにはmigrateコマンドを使用します。

migrateコマンドを行った際に未反映のmigrationファイルが存在すると、DBスキーマの変更が行われます。

migrationsとバージョン管理

migrationsディレクトリに作成されるmigrationファイルをコミットすることで、他のマシンでも同じようにmigrationすることができます。

——–
実際触ってみると開発初期とかにコロコロモデル変更してもすぐ反映できるんで楽ですね。
ちなみにapp作成直後はmigrateを先にやってもmakemigrationsを先にやってもどっちでもいいみたいです。

関連記事

no image

Djangoのカスタムコマンドをコード内から呼ぶ

ドキュメントにまんま書いてあるけど一応メモ。 カスタムコマンド内から他のコマンドを呼び出したい

記事を読む

no image

PySideインストール後にImportError

QtのPythonバインディングにはPyQtとPySideがあって、元々あったのはGPLのPyQtだ

記事を読む

no image

Djangoでreverse後のURLにスクリプト名が入ってしまう

レンタルサーバー上にCGIとしてDjangoを動かそうとしていて、このチケットのdjango.cgi

記事を読む

no image

pipでThe C extension could not be compiledとかいうWARNING

CentOS 6.5にpipでpython-twitterを入れようとしたら、依存パッケージのsim

記事を読む

no image

python-twitterでツイート時刻(created_at)からローカルのdatetimeを作成する

python-twitterのStatusクラスからの投稿時刻の取り方には二通りあり、それぞれUTC

記事を読む

no image

Djangoのタイムゾーンサポートについて調べた

Djangoの1.4以降で追加されたタイムゾーンサポートのことがよくわかってなかったのでドキュメント

記事を読む

no image

PythonでC++のstd::mapみたいな挙動が欲しい

最近競技プログラミングの問題をちょろちょろやってて、それでC++を使ってるんですが、C++のstd:

記事を読む

no image

Django 1.5でDEBUG=Falseにしたら動かないとかstaticが出ないとか

Django 1.5でプロジェクト作って少しして試しにDEBUG=Falseにしてみたら「Serve

記事を読む

no image

Python、DjangoでTwitter認証(Sign in with Twitter)するサンプル

トップページから認証リンクを押すとサインインを求められ、ユーザーのアクセストークンをDBに保存して何

記事を読む

no image

DjangoでMySQLに絵文字を保存

Twitter関連のプログラムを書いていたのですが、絵文字を含むツイートをDBに保存しようとするとエ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
PythonでC++のstd::mapみたいな挙動が欲しい

最近競技プログラミングの問題をちょろちょろやってて、それでC++を使っ

no image
ファイルパーミッションを664から644に変えてもGitで反映されない

って思ったらGitのこと勘違いしてたっていうメモ。 Gitはファイル

no image
CentOS6.9を7.3にアップグレード

CentOS6系から7系へのアップグレードはアップグレードツールが存在

no image
ブラウザにフォームの値を覚えさせない

formのinputやselectにvalueやselectedで現在

no image
[WordPress]dbDelta()でテーブルが作成できない

WordPressのプラグインの勉強をしていて、テーブルを作成するため

→もっと見る

PAGE TOP ↑