< mysql2 >

https://github.com/mysqljs/mysql

    - sequelize에서 mysql2를 사용한다. (mysql 아님)

 

    - 설치

npm i  mysql2

        - global로 설치하면 동작하지 않는다.



    - mysql 테스트

const mysql = require('mysql2');

 

const connection = mysql.createConnection({

    host: process.env.DB_HOST,

    user: process.env.DB_USERNAME,

    password: process.env.DB_PASSWORD,

    database: process.env.DB_DATABASE

});

 

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {

    if (error) throw error;

    console.log('The solution is: ', results[0].solution);

});




//------------------------------

< Sequelize >

    - node.js용 ORM

    

https://github.com/sequelize/sequelize

    - 매뉴얼 

https://sequelize.org/master/manual/getting-started.html



    - sequelize 설치

npm i sequelize

npm i -g sequelize-cli

 

    - 초기화 템플릿 실행

sequelize init



    - DB 접속 정보 설정

config/config.json 수정



//-------------------------------

    - 로더 수정

        models/index.js 파일 수정

 

const Sequelize = require('sequelize');

const env = process.env.NODE_ENV || 'development';

const config = require(__dirname + '/../config/config.json')[env];

 

const sequelize = new Sequelize(config.database, config.username, config.password, config);

 

//모델 로딩

require('./user').init(sequelize);



// 접속 체크 함수

sequelize.checkCon = async function () {

    console.log(`Checking database connection...`);

    try {

        await sequelize.authenticate();

        console.log('Database connection OK!');

    } catch (error) {

        console.log('Unable to connect to the database:');

        console.log(error.message);

        process.exit(1);

    }

}



// Raw 쿼리

sequelize.raw = async function (str) {

    let option = {};

    if ('SELECT' === str.slice(0, 6).toUpperCase()) {

        option = {

            type: QueryTypes.SELECT,

        }

    }

    let ret = await this.query(str, option);

    return ret;

}



//export

module.exports = sequelize;



//-------------------------------

    - 모델 만들기

        - models/user.js 파일 생성

 

const { Sequelize, DataTypes, Model } = require('sequelize');

 

module.exports = class User extends Sequelize.Model {

    static init(sequelize) {

        return super.init({

            user_no: {

                type: DataTypes.INTEGER,

            },

            name: {

                type: DataTypes.STRING,

            },

        }, {

            sequelize,

            timestamps: false,

            modelName: 'user',

            tableName: 'user',

            paranoid: false,

        });

    }

    static async insert(num, str) {

        try {

            const test = await this.create({

                num, str

            });

            console.log('ret', test);

        } catch (e) {

            console.log('ERROR!!');

        }

    }

}



//-------------------------------------

< 실제 쿼리 >

 

    - API 레퍼런스

https://sequelize.org/master/class/lib/model.js~Model.html



    - DB 접속 확인

        - 쿼리에 필요한 작업은 아님

sequelize.authenticate();

 

//-------------------------

    - Raw Query

https://sequelize.org/master/manual/raw-queries.html

 

let str = `select * from users where name=qwe`;

 

let option = {

    logging: console.log, // 쿼리 로깅 여부, 끄려면 => false

    //type: QueryTypes.SELECT, // 쿼리 타입, SELECT이 경우 지정하지 않으면 2배로 결과가 리턴됨

    raw: false, //모델 설정이 없으면 true

    //model: db.models.User,    mapToModel: true, // 모델에 연결

};

let ret = db.query(str, option).then(ret => {    console.log('ret', ret);})

 

const [results, metadata] = await sequelize.query("UPDATE users SET y = 42 WHERE x = 12");




//-------------------------

https://sequelize.org/master/manual/model-querying-basics.html

    - Create (레코드 생성 )

const test = await User.create({

        user_no: 11,

        name: 'qwe2',

    });



//-------------------------

    - Read (조회)

const { Op } = require("sequelize");

Post.findAll({

    attributes: { exclude: ['baz'] },

  where: {

    [Op.and]: [

      { authorId: 12 },

      { status: 'active' }

    ]

  }

});

 

//-------------------------

    - Update (변경)

await User.update({ lastName: "Doe" }, {

  where: {

    lastName: null

  }

});

 

//-------------------------

    - Delete (삭제)

const { Op } = require("sequelize");

Post.destroy({

  where: {

    authorId: {

      [Op.or]: [12, 13]

    }

  }

});




반응형

'Code > JavaScript' 카테고리의 다른 글

[Javasctipr] Shadow DOM 사용법  (0) 2020.08.23
[JavaScript] Deno  (0) 2020.08.14
[Javascript] 타이머 함수 실행 순서  (0) 2020.08.10
[Javascript] 비동기 함수 (async / await)  (0) 2020.08.10
node.js 실행파일로 만들기  (2) 2020.08.09
Posted by codens