[Node.js] sqlite DB 사용 (sequelize 이용)
- 설치
npm install --save sequelize
npm install --save sqlite3
mapbox /node-sqlite3
https://github.com/mapbox/node-sqlite3 - 4.6k
- v5.0.0 , 2020/07
- 매뉴얼
https://github.com/mapbox/node-sqlite3/wiki/API
//----------------
sqlite3 테스트
function db_test() {
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');//파일인 경우 파일 이름 예) './test1.db'
db.serialize(function () {
db.run("CREATE TABLE IF NOT EXISTS info (title TEXT)");//테이블 생성
// Create , 레코드 추가
var stmt = db.prepare("INSERT INTO info( title) VALUES (?)");
for (var i = 0; i < 2; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
// Read 조회
db.each("SELECT rowid AS id, title FROM info", function (err, row) {
console.log(row.id + ": " + row.title);
});
});
db.close();
}
//---------------------------------------------
< Sequelize >
- DB 접속 정보 설정
config/config.json 수정
"development": {
"database": "main",
"username": "",
"password": "",
"dialect": "sqlite",
"storage": "./test1.db",
"dialectOptions": {
}
},
//-------------------------------
- 로더 수정
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);
//모델 로딩
let models = ['test1', 'db2'];
models.map(val => {
require(`./${val}`).init(sequelize);
});
// Raw 쿼리
sequelize.raw = async function (str, log = false) {
let option = {};
if ('SELECT' === str.slice(0, 6).toUpperCase()) {
option = {
type: QueryTypes.SELECT,
}
}
if (log === false) {
option.logging = false;
}
let ret = await this.query(str, option);
return ret;
}
//export
module.exports = sequelize;
//------------------------------------------
- DB 모델 수정
- models/test.js 파일 수정
const { Sequelize, DataTypes, Model } = require('sequelize');
module.exports = class Test1 extends Sequelize.Model {
static init(sequelize) {
return super.init({
num: {
type: DataTypes.INTEGER,
},
str: {
type: DataTypes.STRING,
},
}, {
sequelize,
timestamps: false,
modelName: 'test1',
tableName: 'test1',
paranoid: false,
});
}
static async create1(num, str) {
try {
const test = await this.create({
num, str
});
//console.log('ret', test);
} catch (e) {
//console.log('ERROR!!');
}
}
}
//--------------------------------------------
main 파일 수정
- app.js 파일 수정
//모델 로딩
const db = require('./models');
//쿼리 실행
db.models.test1.create1(1, 'qwe');
db.raw(`select * from test1`, true)
.then(ret => {
console.log(ret);
});
//--------------------------
// 참고