예를 들어, student 앱의 0001번 마이그레이션 파일이 실행하는 DDL 쿼리를 확인하려면 아래의 명령어를 실행한다.
$ python manage.py sqlmigrate student 0001
주의) DB에서 생성된 제약 조건의 실제 키 이름을 출력하기 위해 DB와 연결이 되어 있어야 한다.
class Student(models.Model):
univ = models.ForeignKey(Univ, related_name='students')
name = models.CharField(max_length=5)
grade = models.SmallIntegerField(default=1)
is_graduated = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'student'
위에 정의된 모델 Student를 생성하는 마이그레이션의 DDL 쿼리를 출력해보자.
$ python manage.py sqlmigrate student 0001
...
BEGIN;
--
-- Create model Student
--
CREATE TABLE "student" (
"id" serial NOT NULL PRIMARY KEY,
"name" varchar(5) NOT NULL,
"grade" smallint NOT NULL,
"is_graduated" boolean NOT NULL,
"created_at" timestamp with time zone NOT NULL,
"updated_at" timestamp with time zone NOT NULL,
"univ_id" integer NOT NULL);
ALTER TABLE "student"
ADD CONSTRAINT "student_univ_id_3534536f_fk_univ_id"
FOREIGN KEY ("univ_id") REFERENCES "univ" ("id")
DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "student_d42eeeb9" ON "student" ("univ_id");
COMMIT;
주석과 함께 DDL 쿼리를 출력한다. 마이그레이션은 단일 트랜잭션 안에서 실행되므로 마이그레이션 실행 도중에 에러가 발생할 경우 롤백(rollback) 처리된다.