web-dev-qa-db-ja.com

Django 1.8-移行とmakemigrationsの違いは何ですか?

ここにあるドキュメントによると: https://docs.djangoproject.com/en/1.8/topics/migrations/ それは言う:

migrate, which is responsible for applying migrations, as well as unapplying and listing their status.

そして

makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.

私が理解したことから、私は最初にします

makemigrations

移行ファイルを作成してから

migrate

実際に移行を適用するには?

ただし、Djangoプロジェクトを開始したばかりで、アプリを "installed_apps"リストに追加したことに注意してください。その後、

python manage.py runserver

そしてそれは言った

You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them.

Makemigrationの実行については何も言及していません。

34
user2719875

投票チュートリアル

  1. python manage.py makemigrations <app>:移行を作成します(SQLコマンドを生成します)。

  2. python manage.py migrate:移行を実行します(SQLコマンドを実行します)。

31
Hakim

Djangoの documentation が示すように、移行は、Djangoがモデルに加えた変更(フィールドの追加、モデルの削除など)をデータベーススキーマに伝播するDjangoの方法です。

makemigrationsは、基本的に、プリインストールされたアプリのSQLコマンドを生成します(インストールされたアプリの設定で表示できます)。 py)およびインストールされたアプリに追加する新しく作成されたアプリのモデル。データベースファイル内のこれらのコマンドは実行されません。したがって、テーブルは移行後に作成されます。

Makemigrationsを適用した後、これらのSQLコマンドはsqlmigrateで見ることができます。 makemigrationsによって生成されます。

migrateは、データベースファイルでこれらのSQLコマンドを実行します。実行後、インストール済みアプリのすべてのテーブルを移行します。データベースファイルに作成されます。

sqlite browser をインストールしてdb.sqlite3を開くと、これに準拠できます。migrateコマンドを実行すると、データベースファイルにすべてのテーブルが表示されます。

14
Rajat Bhatt

知っているようにDjangoは [〜#〜] orm [〜#〜] (オブジェクトリレーショナルマッピング)です。コマンドを使用する場合:

python manage.py makemigrations [app_name]

Sqlコマンドを生成して、models.pyファイルで作成した各クラスに対応するテーブルを作成します。次に、コマンド:

python manage.py migrate [app_name]

makemigrationsによって生成されたコマンドを使用して、データベースにテーブルを作成します。

たとえば、モデルクラスを作成すると、

from Django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

Makemigrationsを使用した後の対応するsqlコマンドは次のようになります

CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);

上記のコマンドを使用すると、移行を使用するときにデータベースにテーブルが作成されます。

9
bSr

データベースの状態を現在のモデルセットと同期させるために、settings.pyファイルのINSTALLED APPSセクションに新しいアプリを追加した後、コマンド-migrate-を実行する必要があります。 models.pyファイルを既に変更していると仮定します。

-makemigrations-を実行すると、モデルへの変更が個々の移行ファイルにパッケージ化されます。

通常、最初にmakemigrationsを実行してから移行します。

Django Models)のドキュメントを参照

2
deadcandance72

これは、移行を行う古い手動の南の方法に代わるDjangoの置き換えです。これらを使用して、モデルの変更をカタログ化し、dbで行われる変更を書き出すことができます。

移行は基本的に古いsyncdbですが、makemigrationsによって行われたすべての移行を考慮に入れます。

2
Mikeec3