django 데이터베이스 이전 sqlmigrate 디버깅
migrate, 데이터베이스를 이전하는 데 사용합니다.
사용예:migrate app
makemigrations는 데이터베이스 변경을 감지하고 데이터베이스 이전 파일을 생성하는 데 사용됩니다.
사용법:makemigratioins app
데이터베이스 마이그레이션 파일을 데이터베이스 언어로 변환하기 위한 qlmigrate (displays the SQL statements for a migratioin.)
사용법: sqlmigrate app migration, 예를 들어makemigrations가 0001 생성initial.py, sqlmigrate app 0001intial, 여기0001initial은migration 매개 변수입니다.
일반적으로migration에서 sqlmigrate를 사용하면 알림 오류가 없으면migrate에서 성공할 수 있습니다.
migrate 성공 예:
root@kanfangha:~/redguy# python manage.py migrate accost
Operations to perform:
Apply all migrations: accost
Running migrations:
Applying accost.0002_auto_20141212_1327... OK
실패한 경우:
Operations to perform:
Apply all migrations: accost
Running migrations:
Applying accost.0002_auto_20141212_1327... FAKED
따라서migrate가 실패하면 sqlmigrate로 디버깅할 수 있습니다.
예를 들면 다음과 같습니다.
root@kanfangha:~/redguy# python manage.py sqlmigrate accost 0002_auto_20141212_1323
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/sqlmigrate.py", line 30, in execute
return super(Command, self).execute(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/sqlmigrate.py", line 61, in handle
sql_statements = executor.collect_sql(plan)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 77, in collect_sql
migration.apply(project_state, schema_editor, collect_sql=True)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py", line 107, in apply
operation.database_forwards(self.app_label, schema_editor, project_state, new_state)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/fields.py", line 139, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/schema.py", line 470, in alter_field
new_field,
ValueError: Cannot alter field accost.Accost.like into accost.Accost.like - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)
accost를Accost.like alter는 M2M(Many Tomany) 필드입니다. 이 경우 필드 like를 이름으로 바꾸면 됩니다. likes로 바꾸세요.그리고 sqlmigrate를 실행하면 성공합니다.
다음과 같습니다.
root@kanfangha:~/redguy# python manage.py sqlmigrate accost 0002_auto_20141212_1327
BEGIN;
ALTER TABLE "accost_accost" DROP COLUMN "collected" CASCADE;
ALTER TABLE "accost_accost" DROP COLUMN "like" CASCADE;
CREATE TABLE "accost_accost_collects" ("id" serial NOT NULL PRIMARY KEY, "accost_id" integer NOT NULL, "myuser_id" integer NOT NULL, UNIQUE ("accost_id", "myuser_id"));
CREATE TABLE "accost_accost_likes" ("id" serial NOT NULL PRIMARY KEY, "accost_id" integer NOT NULL, "myuser_id" integer NOT NULL, UNIQUE ("accost_id", "myuser_id"));
CREATE INDEX accost_accost_collects_372770c0 ON "accost_accost_collects" ("accost_id");
ALTER TABLE "accost_accost_collects" ADD CONSTRAINT "accost_accost_co_accost_id_2b66c74632ab3db8_fk_accost_accost_id" FOREIGN KEY ("accost_id") REFERENCES "accost_accost" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX accost_accost_collects_8b14fb18 ON "accost_accost_collects" ("myuser_id");
ALTER TABLE "accost_accost_collects" ADD CONSTRAINT "accost_accost__myuser_id_1bf115233bc10d70_fk_accounts_myuser_id" FOREIGN KEY ("myuser_id") REFERENCES "accounts_myuser" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX accost_accost_likes_372770c0 ON "accost_accost_likes" ("accost_id");
ALTER TABLE "accost_accost_likes" ADD CONSTRAINT "accost_accost_li_accost_id_3700c980b7e22204_fk_accost_accost_id" FOREIGN KEY ("accost_id") REFERENCES "accost_accost" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX accost_accost_likes_8b14fb18 ON "accost_accost_likes" ("myuser_id");
ALTER TABLE "accost_accost_likes" ADD CONSTRAINT "accost_accost__myuser_id_6af76a97d74d7ca4_fk_accounts_myuser_id" FOREIGN KEY ("myuser_id") REFERENCES "accounts_myuser" ("id") DEFERRABLE INITIALLY DEFERRED;
COMMIT;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.