2012-10-19 3 views
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") 

을 무슨 일이야? 왜 남반구가 올바르게 초기화되지 않습니까?

+1

'--initial'은 초기 테이블을 생성하는 데 사용되어야한다; 이미 myapp_model 테이블을 생성했다. – geoffspear

+0

가능한 경우 데이터베이스를 다시 만들고 syncdb를 실행하지 않고 처음 초기화를 다시 실행하십시오. – Mikael

+0

@wooble 명령을 실행하기 전에 테이블이 존재하지 않습니다 – fredley

답변

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 

을 주목 0003 -prefix이 (대부분이) 정의 마이그레이션이 이미 있음을 나타냅니다. 이것은 다음 명령의 출력에 의해 확인된다

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

즉, 이미 적어도 하나가 테이블을 생성 할의 initial 마이그레이션의 몇 가지있다. # 3 마이그레이션은이 시도를 다시 시도하지만 실패합니다. 물론 지금까지의 테이블이 존재하기 때문입니다.

Django 앱을 만들 때 수행해야 할 일은 initial입니다. migrations 폴더에 0001_initial.py이라는 파일이 포함되면 더 이상 초기 마이그레이션이 필요하지 않습니다. 이 시점에서 테이블에 변경하는 경우, auto로 전화 한 후 마이그레이션 :

./manage.py schemamigration myapp --auto 
./manage.py migrate myapp 
관련 문제