Node.jsでMySQL

Node.jsでMySQL

Node.jsでMySQL

Node.jsからMySQLにアクセスする方法です。
なんか検索すると色々なコードがあって混乱したんですが、結局以下のように落ち着いたのでメモって置きます。

インストール

npm install mysql2

mysql2/promise を使うのが吉のようです。

インポート

ソース上で利用するには最初にimportします。

import * as mysql from 'mysql2/promise'

requireは最近流行らないので使いません。

SELECT

async function selectExample() {
  var conn = null
  try {
    conn = await mysql.createConnection({
        host: ホスト,
        port: ポート,
        user: ユーザー名,
        password: パスワード,
        database: データベース
    }
    const [rows] = await conn.execute('select fld1, fld2 from mytable')
    return rows
  } catch (error) {
    console.log(error)
    throw error
  } finally {
	if (conn)
	  await conn.end()
  }
}

await selectExample()

mysql2/promiseの関数は基本非同期なのでasync/await使います。
selectでexecuteなのがモヤモヤ。

INSERT/UPDATAE

async function insertExample() {
  var conn = null
  try {
    conn = await mysql.createConnection({
        host: ホスト,
        port: ポート,
        user: ユーザー名,
        password: パスワード,
        database: データベース
    }
    await conn.beginTransaction()
    const [result] = await conn.query("insert into mytable (fld1, fld2) values ('abc', 'def')")
    const id = result.insertId    // 採番されたPKが取得できる
    await conn.commit()
    return id
  } catch (error) {
    console.log(error)
	if (conn)
      await conn.rollback()
    throw error
  } finally {
	if (conn)
	  await conn.end()
  }
}

await insertExample()

updateはconn.queryの中のSQLをupdateに変えるだけ。
更新件数を取得したい場合は result.affectedRows で取得できます。
insertだと何故かqueryなのがモヤモヤ。
トランザクションも上記のようにすれば機能します。


O/Rマッパに慣れ過ぎててこういうの久しぶり。
物凄く面倒。Node.js向けのO/Rマッパでスタンダードなやつありませんかね。

コメント

このブログの人気の投稿

(真)ESP32の開発環境をVSCodeで作る

ESP32にmicroSD接続

ESP32でデバッグ