Python/django

Django Migration 사용 안하고 DDL 사용하기(2)

알면 알 수록 재밌다! 2023. 5. 17. 18:50

migrate 명령어 말고 SQL로 DB에 적용시키는데 쉬운 방법이 있다.

 

아래처럼 migration 을 해서 0001.initial.py 파일을 만들어보자.

# 마이그레이션해주기
python3 manage.py makemigrations 'app 이름' --settings=config.settings.local

# 예시 
python3 manage.py makemigrations 'pizza' --settings=config.settings.local

 

 

그리고나서 아래 명령어를 한다.

python3 manage.py sqlmigrate pizza 0001 --settings=config.settings.local

 

그럼 아래처럼 쿼리문을 보여준다.

SELECT VERSION(),
                       @@sql_mode,
                       @@default_storage_engine,
                       @@sql_auto_is_null,
                       @@lower_case_table_names,
                       CONVERT_TZ('2001-01-01 01:00:00', 'UTC', 'UTC') IS NOT NULL
            ; args=None; alias=default
(0.002) SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; args=None; alias=default
(0.019) SHOW FULL TABLES; args=None; alias=default
(0.004) SELECT `django_migrations`.`id`, `django_migrations`.`app`, `django_migrations`.`name`, `django_migrations`.`applied` FROM `django_migrations`; args=(); alias=default
CREATE TABLE `pizza_pizza` (`id` bigint AUTO_INCREMENT NOT NULL PRIMARY KEY, `created` datetime(6) NOT NULL, `updated` datetime(6) NOT NULL, `name` varchar(50) NOT NULL); (params None)
(0.011)
            SELECT engine
            FROM information_schema.tables
            WHERE
                table_name = 'pizza_pizza' AND
                table_schema = DATABASE()
            ; args=['pizza_pizza']; alias=default
CREATE INDEX `pizza_pizza_created_2a9804e7` ON `pizza_pizza` (`created`); (params ())
--
-- Create model Vehicle
--
CREATE TABLE `pizza_pizza` (`id` bigint AUTO_INCREMENT NOT NULL PRIMARY KEY, `created` datetime(6) NOT NULL, `updated` datetime(6) NOT NULL, `name` varchar(50) NOT NULL);
CREATE INDEX `pizza_pizza_created_2a9804e7` ON `pizza_pizza` (`created`);

 

그럼 위처럼 나오는데, 위를 보고 sql 문서를 작성하면 된다.

 

/**
 * pizza 테이블 생성
 */

DROP TABLE IF EXISTS `pizza`;

CREATE TABLE
    `pizza` (
        `id` bigint AUTO_INCREMENT NOT NULL PRIMARY KEY,
        `created` datetime(6) NOT NULL,
        `updated` datetime(6) NOT NULL,
        `name` varchar(50) NOT NULL
    );
    
CREATE INDEX
    `pizza_created_created` ON `pizza` (`created`);

INSERT INTO
    `pizza` (
        `id`,
        `created`,
        `updated`,
        `name`
    )
VALUES (
        1,
        '2023-05-17 16:52:52.841231',
        '2023-05-17 16:52:52.841263',
        '페퍼로니'
    ), (
        2,
        '2022-12-17 16:52:52.841231',
        '2022-12-17 16:52:52.841263',
        '불고기'
    ), (
        3,
        '2022-11-17 16:52:52.841231',
        '2022-11-17 16:52:52.841263',
        '콤비네이션'
    );

COMMIT;

위 처럼 만들어볼 수 있다.