반응형
0. npx 명령어 실행 시 Unable to resolve sequelize package ~.라고 뜬다면 package.json이 있는 경로에서 실행 할 것.
1. 모델 정의 또는 수정
npx sequelize model:generate --name [모델명] --attributes firstName:string,lastName:string,email:string
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('log_mng', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
username: {
type: Sequelize.STRING
},
ip: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
// await queryInterface.dropTable('log_mng');
}
};
2. 기존 테이블에 컬럼 추가 및 변경
npx sequelize migration:create --name [파일명]
- 단일 컬럼 추가 / 삭제
'use strict';
module.exports = {
/**
* 컬럼 추가
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async up(queryInterface, Sequelize) {
return queryInterface.addColumn("log_mng", "partname", {
type: Sequelize.STRING(200),
comment: '부서명'
});
},
/**
* 컬럼 삭제
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async down(queryInterface, Sequelize) {
return queryInterface.removeColumn("log_mng", "partname");
}
};
- 여러 컬럼 추가 / 삭제
'use strict';
module.exports = {
/**
* 컬럼 추가
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async up(queryInterface, Sequelize) {
return queryInterface.sequelize.transaction((t) => {
return Promise.all([
queryInterface.addColumn("los_term", "term_gbn", {
type: Sequelize.STRING(200),
comment: '용어_구분'
}, { transaction: t }),
queryInterface.addColumn("los_term", "unit", {
type: Sequelize.STRING(200),
comment: '단위'
}, { transaction: t })
])
});
},
/**
* 컬럼 삭제
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async down(queryInterface, Sequelize) {
return queryInterface.sequelize.transaction((t) => {
return Promise.all([
queryInterface.removeColumn('los_term', 'term_gbn', { transaction: t }),
queryInterface.removeColumn('los_term', 'unit', { transaction: t })
])
})
}
};
- 컬럼 수정 / 취소
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
return queryInterface.changeColumn("tb_name", "col_name", {
type: Sequelize.STRING,
comment: '속성_ID'
});
},
down: async (queryInterface, Sequelize) => {
return queryInterface.changeColumn("tb_name", "col_name", {
type: Sequelize.STRING,
comment: '이전_속성_ID'
});
}
};
- 컬럼 외래키 추가 / 제거
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
return queryInterface.addConstraint("tb_name", {
fields: ['fk_col_id'],
type: 'foreign key',
name: 'fk_name',
references: {
table: 'p_tb_name',
field: 'id'
}
// onDelete: 'cascade',
// onUpdate: 'cascade'
});
},
down: async (queryInterface, Sequelize) => {
return queryInterface.removeConstraint("tb_name", "fk_name");
}
};
3. 마이그레이션 실행
npx sequelize db:migrate
dotenv 모듈을 사용해서 config 파일에 입력된 DB 정보로 migrate
- 개발 DB
npx sequelize db:migrate --env development
- 운영 DB
npx sequelize db:migrate --env production
* migration한 상태에서 내용 수정
1. migration 되돌리기. undo 실행 시 각 파일의 down에 정의된 코드가 실행 됨.
No executed migrations found. 라는 문구가 나오면 모두 되돌아 간 것.
npx sequelize db:migrate:undo // 작업 취소
npx sequelize db:migrate:undo:all //작업 모두 되돌리기
2. migration 파일과 model의 내용을 맞춘다.
3. migration 실행
npx sequelize db:migrate
반응형
'Nodejs > Sequelize' 카테고리의 다른 글
Sequelize Native Query - sequelize.query() 사용법 (0) | 2022.01.18 |
---|---|
nodejs sequelize (+postgis) geojson by extent (0) | 2021.08.06 |
Nodejs Sequelize + gdal 을 이용한 shp 업로드 (0) | 2021.06.15 |
Nodejs Express + Sequelize 기본 셋팅(Postgresql) (0) | 2021.03.31 |