1

作成したばかりの空のMySQLデータベースがあります。south私の中にありINSTALLED_APPSます。

走る:

$ ./manage.py syncdb
...
Creating table some_app_table

You just installed Django's auth system, which means you don't have any superusers defined.
...
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

Synced:
 > django.contrib.auth
 > django.contrib.contenttypes
...

Not synced (use migrations):
 - myapp
...


$ ./manage.py schemamigration myapp --initial
 + Added model myapp.Model
...
Created 0003_initial.py. You can now apply this migration with: ./manage.py migrate myapp


$ ./manage.py migrate myapp
Running migrations for myapp:
 - Migrating forwards to 0003_initial.
 > skan:0001_initial
 > skan:0002_initial
FATAL ERROR - The following SQL query failed: CREATE TABLE `myapp_model` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `user_id` integer NULL, `name` varchar(200) NOT NULL);
The error was: (1050, "Table 'myapp_model' already exists")

どうしたの?なぜサウスは正しく初期化されないのですか?

4

1 に答える 1

5

すでにいくつかの移行が定義されています: initial(予想どおり) 最初の移行にのみ必要です。

あなたのsyncdb出力は言う:

Not synced (use migrations):
 - myapp

これは、南が期待どおりに機能していることを示しています。しかし、次のようにします。

$ ./manage.py schemamigration myapp --initial
+ Added model myapp.Model
...
Created 0003_initial.py. You can now apply this migration with: ./manage.py migrate myapp

-prefixに注意してください0003。これは (ほとんどの場合)、既に移行が定義されていることを示しています。これは、次のコマンドの出力によって確認されます。

$ ./manage.py migrate myapp
Running migrations for myapp:
 - Migrating forwards to 0003_initial.
 > skan:0001_initial
 > skan:0002_initial
 <snip>

つまり、すでにいくつかのinitial移行があり、そのうちの少なくとも 1 つがそのテーブルを作成します。#3 移行はこれを再試行しますが、失敗します。もちろん、テーブルはすでに存在するためです。

必要なことはinitial、Django アプリの作成時にのみ使用することです。migrationsフォルダーに というファイルが含まれるとすぐに、0001_initial.py最初の移行は必要なくなります。この時点からテーブルを変更する場合は、 で呼び出してからauto移行します。

./manage.py schemamigration myapp --auto
./manage.py migrate myapp
于 2012-10-19T12:43:53.363 に答える