クイック スタート:Node.js を使用して Azure Database for MySQL に接続してデータを照会する
適用対象: Azure Database for MySQL - シングル サーバー
重要
Azure Database for MySQL シングル サーバーは廃止パスにあります。 Azure Database for MySQL - フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL - フレキシブル サーバーへの移行の詳細については、Azure Database for MySQL シングル サーバーの現状に関するページを参照してください。
このクイックスタートでは、Node.js を使用して Azure Database for MySQL に接続します。 Mac、Linux、Windows の各プラットフォームから SQL ステートメントを使用して、データベース内のデータをクエリ、挿入、更新、削除できます。
この記事は、Node.js を使用した開発には慣れているものの、Azure Database for MySQL の使用は初めてであるユーザーを想定しています。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Azure Database for MySQL サーバー。 Azure portal を使用して Azure Database for MySQL サーバーを作成するか、Azure CLI を使用して Azure Database for MySQL サーバーを作成してください。
重要
Azure portal または Azure CLI を使用して、接続元の IP アドレスにサーバーのファイアウォール規則が追加されていることを確認します。
Node.js と MySQL コネクタのインストール
プラットフォームに応じて、該当するセクションの手順に従って Node.js をインストールしてください。 npm を使用して mysql パッケージとその依存関係をプロジェクト フォルダーにインストールしてください。
Node.js ダウンロード ページにアクセスし、必要な Windows インストーラー オプションを選択します。
ローカル プロジェクト フォルダーを作成します (例:
nodejsmysql
)。コマンド プロンプトを開き、ディレクトリをプロジェクト フォルダーに変更します (例:
cd c:\nodejsmysql\
)。NPM ツールを実行して、mysql ライブラリをプロジェクト フォルダーにインストールします。
cd c:\nodejsmysql\ "C:\Program Files\nodejs\npm" install mysql "C:\Program Files\nodejs\npm" list
npm list
の出力テキストを確認してインストール結果を検証します。 バージョン番号は、新しいパッチのリリースに伴って変わる場合があります。
接続情報の取得
Azure Database for MySQL に接続するために必要な接続情報を取得します。 完全修飾サーバー名とログイン資格情報が必要です。
- Azure Portal にログインします。
- Azure portal の左側のメニューにある [すべてのリソース] を選択し、作成したサーバー (例: mydemoserver) を検索します。
- サーバー名を選択します。
- サーバーの [概要] パネルから、 [サーバー名] と [サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。
コード サンプルの実行
JavaScript コードを新しいテキスト ファイルに貼り付け、そのファイルを .js というファイル拡張子でプロジェクト フォルダーに保存します (例: C:\nodejsmysql\createtable.js や/home/username/nodejsmysql/createtable.js)。
コードの
host
、user
、password
およびdatabase
構成オプションを、サーバーとデータベースを作成した時に指定した値に置き換えます。SSL 証明書を取得する: Azure Database for MySQL サーバーで SSL 経由で通信するために必要な証明書を https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem からダウンロードし、ローカル ドライブに保存します。
Microsoft Internet Explorer と Microsoft Edge の場合: ダウンロードが完了したら、証明書の名前を DigiCertGlobalRootCA.crt.pem に変更します。
ソブリン クラウドにおけるサーバーの証明書については、Azure Government、Azure China、Azure Germany の各リンクを参照してください。
ssl
config オプションで、ca-cert
ファイル名をこのローカル ファイルのパスに置き換えます。コマンド プロンプトまたは Bash シェルを開き、ディレクトリをプロジェクト フォルダーに変更します (
cd nodejsmysql
)。アプリケーションを実行するには、node コマンドに続けてファイル名を入力します (例:
node createtable.js
)。Windows で環境変数 PATH に node アプリケーションが追加されていない場合、node アプリケーションを起動するには完全パスを使用する必要があります (例:
"C:\Program Files\nodejs\node.exe" createtable.js
)
接続、テーブルの作成、データの挿入
接続し、SQL ステートメント CREATE TABLE および INSERT INTO を使用してデータを読み込むには、次のコードを使用します。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーへの接続を確立するには、connect() 関数を使用します。 MySQL データベースに対して SQL クエリを実行するには、query() 関数を使用します。
const mysql = require('mysql');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_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', 154],
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 ステートメントを使用してデータを読み取るには、次のコードを使用します。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。 クエリの結果は、results 配列を使って保存します。
const mysql = require('mysql');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_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 ステートメントを使ってデータを更新するには、以下のコードを使います。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。
const mysql = require('mysql');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_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 = ?', [200, '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 ステートメントを使ってデータを削除します。
MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。
const mysql = require('mysql');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_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