次の方法で共有


クイック スタート: Node.js を使って Azure Database for MySQL フレキシブル サーバーに接続してデータのクエリを実行する

このクイックスタートでは、Node.js を使用して Azure Database for MySQL フレキシブル サーバーに接続します。 Mac、Linux、Windows の各プラットフォームから SQL ステートメントを使用して、データベース内のデータをクエリ、挿入、更新、削除できます。

この記事では、Node.js を使用した開発には慣れているが、Azure Database for MySQL フレキシブル サーバーは初めて使用するユーザーを想定しています。

前提条件

このクイックスタートでは、次のいずれかのガイドで作成されたリソースを出発点として使用します。

Node.js と MySQL コネクタのインストール

プラットフォームに応じて、該当するセクションの手順に従って Node.js をインストールしてください。 npm を使用して mysql2 パッケージとその依存関係をプロジェクト フォルダーにインストールしてください。

  1. Node.js ダウンロード ページにアクセスし、必要な Windows インストーラー オプションを選択します。

  2. ローカル プロジェクト フォルダーを作成します (例: nodejsmysql)。

  3. コマンド プロンプトを開き、ディレクトリをプロジェクト フォルダーに変更します (例: cd c:\nodejsmysql\)。

  4. NPM ツールを実行して、mysql2 ライブラリをプロジェクト フォルダーにインストールします。

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  5. npm list の出力テキストを確認してインストール結果を検証します。 バージョン番号は、新しいパッチのリリースに伴って変わる場合があります。

接続情報の取得

Azure Database for MySQL フレキシブル サーバー インスタンスに接続するために必要な接続情報を取得します。 完全修飾サーバー名とサインイン資格情報が必要です。

  1. Azure portal にサインインします。
  2. Azure portal の左側のメニューにある [すべてのリソース] を選択し、作成したサーバー (例: mydemoserver) を検索します。
  3. サーバー名を選択します。
  4. サーバーの [概要] パネルから、 [サーバー名][サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。

コード サンプルを実行する

  1. JavaScript コードを新しいテキスト ファイルに貼り付け、そのファイルを .js というファイル拡張子でプロジェクト フォルダーに保存します (例: C:\nodejsmysql\createtable.js や/home/username/nodejsmysql/createtable.js)。
  2. コードの hostuserpassworddatabase 構成オプションを、MySQL フレキシブル サーバーとデータベースを作成したときに指定した値に置き換えます。
  3. パブリック SSL 証明書を取得する: クライアント アプリケーションで暗号化された接続を使うには、パブリック SSL 証明書をダウンロードする必要があります。以下のスクリーンショットに示されているように、その証明書は Azure portal の ネットワーク ブレードでも入手できます。

証明書ファイルをダウンロードし、希望の場所に保存します。

  1. ssl config オプションで、 ca-cert ファイル名をこのローカル ファイルのパスに置き換えます。 これにより、アプリケーションが安全に SSL 経由でデータベースに接続できるようになります。
  2. コマンド プロンプトまたは Bash シェルを開き、ディレクトリをプロジェクト フォルダーに変更します (cd nodejsmysql)。
  3. アプリケーションを実行するには、node コマンドに続けてファイル名を入力します (例: node createtable.js)。
  4. Windows で環境変数 PATH に Node アプリケーションが追加されていない場合、Node アプリケーションを起動するには完全パスを使用する必要があります (例: "C:\Program Files\nodejs\node.exe" createtable.js)

接続、テーブルの作成、データの挿入

接続し、SQL ステートメント CREATE TABLE および INSERT INTO を使用してデータを読み込むには、次のコードを使用します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーへの接続を確立するには、connect() 関数を使用します。 MySQL データベースに対して SQL クエリを実行するには、query() 関数を使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
    if (err) {
        console.log("!!! Cannot connect !!! Error:");
        throw err;
    }
    else
    {
        console.log("Connection established.");
        queryDatabase();
    }
});

function queryDatabase()
{
    conn.query('DROP TABLE IF EXISTS inventory;',
        function (err, results, fields) {
            if (err) throw err;
            console.log('Dropped inventory table if existed.');
        }
    )
    conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);',
        function (err, results, fields) {
            if (err) throw err;
            console.log('Created inventory table.');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150],
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 250],
        function (err, results, fields) {
            if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100],
        function (err, results, fields) {
            if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.end(function (err) {
        if (err) throw err;
        else  console.log('Done.')
    });
};

データの読み取り

接続し、SELECT SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。 クエリの結果は、results 配列を使って保存します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            readData();
        }
    });

function readData(){
    conn.query('SELECT * FROM inventory',
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Selected ' + results.length + ' row(s).');
            for (i = 0; i < results.length; i++) {
                console.log('Row: ' + JSON.stringify(results[i]));
            }
            console.log('Done.');
        })
    conn.end(
        function (err) {
            if (err) throw err;
            else  console.log('Closing connection.')
    });
};

データの更新

接続し、UPDATE SQL ステートメントを使用してデータを更新するには、次のコードを使用します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            updateData();
        }
    });

function updateData(){
       conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [75, 'banana'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Updated ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

データの削除

以下のコードを使って接続し、DELETE SQL ステートメントを使ってデータを削除します。

Azure Database for MySQL フレキシブル サーバー インスタンスとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            deleteData();
        }
    });

function deleteData(){
       conn.query('DELETE FROM inventory WHERE name = ?', ['orange'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Deleted ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

リソースをクリーンアップする

このクイックスタートで使用したすべてのリソースをクリーンアップするには、次のコマンドを使用してリソース グループを削除します。

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes