npm mysql

succeeding·2022년 7월 4일
0

DOCS

Connection options


supportBigNumbers: When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option (Default: false).

TIMESTAMP

커넥션 옵션으로 dateStrings를 true로 두고 아래 코드(DOCS에 있음) 사용

var CURRENT_TIMESTAMP = { toSqlString: function() { return 'CURRENT_TIMESTAMP()'; } };
var sql = mysql.format('UPDATE posts SET modified = ? WHERE id = ?', [CURRENT_TIMESTAMP, 42]);
console.log(sql); // UPDATE posts SET modified = CURRENT_TIMESTAMP() WHERE id = 4

문자열로 구하고 싶으면 아래 방법을 사용하자
https://stackoverflow.com/questions/5129624/convert-js-date-time-to-mysql-datetime

Transaction

아래는 DOCS에 나와있는 transactio 코드이다.

connection.beginTransaction(function(err) {
  if (err) { throw err; }
  connection.query('INSERT INTO posts SET title=?', title, function (error, results, fields) {
    if (error) {
      return connection.rollback(function() {
        throw error;
      });
    }
 
    var log = 'Post ' + results.insertId + ' added';
 
    connection.query('INSERT INTO log SET data=?', log, function (error, results, fields) {
      if (error) {
        return connection.rollback(function() {
          throw error;
        });
      }
      connection.commit(function(err) {
        if (err) {
          return connection.rollback(function() {
            throw err;
          });
        }
        console.log('success!');
      });
    });
  });
});

async/awiat으로 바꾸면 다음과 같을 것이다.(사수님의 도움을 받았다 ^^)

async function foo() {
  try {
    await asyncBeginTransaction(dbConnection)
    await asyncQuery(dbConnection,'INSERT INTO posts SET title=${title}')
    let log = 'Post ' + results.insertId + ' added';
    await asyncQuery(dbConnection, 'INSERT INTO log SET data=${log}')
    dbConnection.commit()
    console.log('success!')
  } catch (err) {
    dbConnection.rollback()
    throw err
  }
}

async function asyncBeginTransaction(dbConnection) {
  return new Promise((resolve, reject) => {
    dbConnection.beginTransaction(error => {
      if (error) reject(error)
      resolve()
    })
  })
}

async function asyncQuery(dbConnection, query) {
  return new Promise((resolve, reject) => {
    dbConnection.query(query, (error, results, fields) => {
      if (error) {
        reject(error)
      }
      resolve(results)
    })
  })
}

query

results

connection.sql()results결과는 다음과 같다. value 컬럼값에 접근하려면 results[0].value 라고 접근하면 된다.

fields

connection.sql()fields결과는 다음과 같다. 어따 써야할지 아직은 모르겠다.

0개의 댓글