< 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 |