[포스코x코딩온] 웹개발자 풀스택 과정 6주차 | Sequelize

구준희·2023년 8월 13일
0

[포스코x코딩온]교육

목록 보기
19/40
post-thumbnail
post-custom-banner

Sequelize

  • 자바스크립트 구문을 알아서 SQL로 변환해준다.
  • DB 작업을 쉽게할 수 있도록 도와주는 ORM 라이브러리 중 하나
  • ORM : Object Relation Mapping

Sequelize 설치

npm install sequelize sequelize-cli mysql2
  1. sequelize : 시퀄라이즈 패키지
  2. sequelize-cli : 시퀄라이즈 명령어 실행
  3. mysql2 : mysql과 시퀄라이즈 연결하는 드라이버
npx sequelize init
  • npx sequelize init 명령어 호출하면 새로운 폴더가 생성됨

sequelize 모델 정의

  • define 명령어를 사용해야 된다.
  • 파라미터 3개를 받는데, (모델이름, 컬럼정의, 모델옵션정의) 순으로 받는다.
    Sequelize.define(param1, param2, param3);
    // param1 : 모델(테이블) 이름 설정
    // param2 : 컬럼 정의
    // param3 : 모델 옵션 정의
  1. sequelize.define() 첫 번째 인자 : 모델이름 설정
const model = Sequelize.define(
  //모델 정의 -> sequelize 객체의 define 함수를 사용
  `visitor`, // 인자 1 : 모델 이름 설정
   {...
   }, 		// 인자 2 :컬럼 정의
   {...
   }			// 인자 3 : 모델의 옵션 정의
  );
  1. sequelize.define()두 번째 인자 : 컬럼 정의
이름속성
type데이터 타입을 정의(문자, 숫자, 날짜 등등)
primaryKey기본키 설정(default : false)
autoIncrement숫자 자동 증가(default : false)
allowNullNOT NULL 허용 여부(default : true)
commentcolumn에 대한 설명을 작성한다.
validate데이터유효성 검사하는 속성
  1. sequelize.define()세 번째 인자 : 모델 옵션 정의
이름속성
charsetutf-8
collateutf-8_general_ci
tableName테이블 이름 설정
freezeTableNametrue로 설정하면 이름을 복수로 설정하지 않는다.
timestamps기본적인 설정을 true로 설정

예시)

const model = sequelize.define(
  'visitor',
  {
    id :{
      type: DataTypes.INTEGER,
      allowNull : false,
      primaryKey : true,
      autoIncrement: true
    },
    name :{
      type : DataTypes.STRING(10),
      allowNull : false,
    },
    comment:{
      type : DataTypes.TEXT('medium'),
    }
  },
  {
    tableName : 'visitor', 	//테이블 이름 설정
    freezeTableName : true,	//테이블 이름에 복수형x
    timestamps: false,		//기본적인 설정 true로 설정
  }
);

Sequelize 쿼리문

  1. 테이블 조회
  • findAll()(SELECT) : findAll은 쿼리 결과를 배열 객체로 반환
  • findOne()(SELECT): findOne은 쿼리 결과를 객체로 반환
  1. 테이터 넣기
  • create()(INSERT)
  1. 수정
  • UPDATE()(UPDATE)
  1. 삭제
  • DESTROY()(DELETE)
  1. 조건조회
  • attributes,where : attributes 옵션을 사용하여 원하는 칼럼만 가져올 수도 있다. 또한, where옵션으로 조건들을 나열할 수도 있다.where옵션은 기본적으로 AND 옵션과 같다.

  • 자주 쓰이는 Op객체

    Op.gt초과
    Op.gte이상
    Op.lt미만
    Op.lte이하
    Op.ne같지 않음
    Op.or또는
    Op.in배열 요소 중 하나
    Op.notIn배열 요소와 모두 다름
const user = User.findAll({
  attributes:['name','age'],
  where:{
    married:true,
    age:{[Op.gt]:30},	//age가 30 초과일 때
  },
});
           

Sequelize 사용




force:false = 테이블이 없으면 만들고 있으면 안 만든다.
force:true = 테이블 무조건 생성, 테이블이 있어도 지우고 생성함
참고로 default 값은 force:false

테이블

생성해줫음


콘솔찍어보면 실제로는 datavalue의 객체만 온다.

send로 뭐가 오는지 확인

객체로 날라오는거 확인


테이블이름 : (hahaha)
옵션 설정 따로 안해줘서 (freezeTableName : true)
복수인 hahahas가 나왓음

profile
꾸준히합니다.
post-custom-banner

0개의 댓글