クイック スタート:Ruby を使用して Azure Database for MySQL に接続してデータを照会する

適用対象: Azure Database for MySQL - シングル サーバー

重要

Azure Database for MySQL の単一サーバーは提供終了パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、「Azure Database for MySQL 単一サーバーの動作」を参照してください

このクイックスタートでは、Windows、Linux、Mac の各プラットフォームから Ruby アプリケーションと mysql2 gem を使用して Azure Database for MySQL に接続する方法を紹介します。 ここでは、SQL ステートメントを使用してデータベース内のデータを照会、挿入、更新、削除する方法を説明します。 このトピックでは、Ruby を使用した開発には慣れているものの、Azure Database for MySQL の使用は初めてであるユーザーを想定しています。

前提条件

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

重要

Azure portal または Azure CLI を使用して、接続元の IP アドレスにサーバーのファイアウォール規則が追加されていることを確認します。

Ruby のインストール

ご使用のコンピューターに Ruby、Gem、MySQL2 ライブラリをインストールします。

  1. バージョン 2.3 の Ruby をダウンロードしてインストールします。
  2. スタート メニューから新しいコマンド プロンプト (cmd) を起動します。
  3. バージョン 2.3 の Ruby ディレクトリに移動します。 cd c:\Ruby23-x64\bin
  4. Ruby のインストールをテストします。ruby -v コマンドを実行して、インストールされているバージョンを確認してください。
  5. Gem のインストールをテストします。gem -v コマンドを実行して、インストールされているバージョンを確認してください。
  6. コマンド gem install mysql2 を実行し、Gem を使用して Ruby 用の Mysql2 モジュールをビルドします。

接続情報の取得

Azure Database for MySQL に接続するために必要な接続情報を取得します。 完全修飾サーバー名とログイン資格情報が必要です。

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

Ruby コードの実行

  1. 以下のセクションからテキスト ファイルに Ruby コードを貼り付け、.rb というファイル拡張子でプロジェクト フォルダーに保存します (例: C:\rubymysql\createtable.rb/home/username/rubymysql/createtable.rb)。
  2. このコードを実行するには、コマンド プロンプトまたは Bash シェルを起動します。 プロジェクト フォルダーに移動します (cd rubymysql)。
  3. そのうえで、Ruby コマンドに続けてファイル名を入力し、アプリケーションを実行します (例: ruby createtable.rb)。
  4. Windows OS で環境変数 PATH に Ruby アプリケーションが追加されていない場合、ruby アプリケーションを起動するには完全なパスを使用する必要があります (例: "c:\Ruby23-x64\bin\ruby.exe" createtable.rb)。

接続とテーブルの作成

接続し、CREATE TABLE SQL ステートメントでテーブルを作成してから、INSERT INTO SQL ステートメントでそのテーブルに行を追加するには、次のコードを使用します。

このコードでは、MySQL サーバーへの接続に mysql2::client クラスが使用されます。 次に、query() メソッドを呼び出して、DROP、CREATE TABLE、INSERT INTO の各コマンドを実行します。 最後に、close() を呼び出して、終了する前に接続を閉じます。

hostdatabaseusernamepassword の各文字列は、実際の値に置き換えてください。

require 'mysql2'

begin
	# Initialize connection variables.
	host = String('mydemoserver.mysql.database.azure.com')
	database = String('quickstartdb')
    username = String('myadmin@mydemoserver')
	password = String('yourpassword')

	# Initialize connection object.
    client = Mysql2::Client.new(:host => host, :username => username, :database => database, :password => password)
    puts 'Successfully created connection to database.'

    # Drop previous table of same name if one exists
    client.query('DROP TABLE IF EXISTS inventory;')
    puts 'Finished dropping table (if existed).'

    # Drop previous table of same name if one exists.
    client.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);')
    puts 'Finished creating table.'

    # Insert some data into table.
    client.query("INSERT INTO inventory VALUES(1, 'banana', 150)")
    client.query("INSERT INTO inventory VALUES(2, 'orange', 154)")
    client.query("INSERT INTO inventory VALUES(3, 'apple', 100)")
    puts 'Inserted 3 rows of data.'

# Error handling

rescue Exception => e
    puts e.message

# Cleanup

ensure
    client.close if client
    puts 'Done.'
end

データの読み取り

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

このコードでは、Azure Database for MySQL への接続に mysql2::client クラスの new() メソッドが使用されます。 次に、query() メソッドを呼び出して SELECT コマンドを実行します。 その後、close() メソッドを呼び出して、終了する前に接続を閉じます。

hostdatabaseusernamepassword の各文字列は、実際の値に置き換えてください。

require 'mysql2'

begin
	# Initialize connection variables.
	host = String('mydemoserver.mysql.database.azure.com')
	database = String('quickstartdb')
    username = String('myadmin@mydemoserver')
	password = String('yourpassword')

	# Initialize connection object.
    client = Mysql2::Client.new(:host => host, :username => username, :database => database, :password => password)
    puts 'Successfully created connection to database.'

    # Read data
    resultSet = client.query('SELECT * from inventory;')
    resultSet.each do |row|
        puts 'Data row = (%s, %s, %s)' % [row['id'], row['name'], row['quantity']]
    end
    puts 'Read ' + resultSet.count.to_s + ' row(s).'

# Error handling

rescue Exception => e
    puts e.message

# Cleanup

ensure
    client.close if client
    puts 'Done.'
end

データの更新

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

このコードは、mysql2::client クラスの .new() メソッドを使用して Azure Database for MySQL に接続しています。 次に、query() メソッドを呼び出して UPDATE コマンドが実行されます。 その後、close() メソッドを呼び出して、終了する前に接続を閉じます。

hostdatabaseusernamepassword の各文字列は、実際の値に置き換えてください。

require 'mysql2'

begin
	# Initialize connection variables.
	host = String('mydemoserver.mysql.database.azure.com')
	database = String('quickstartdb')
    username = String('myadmin@mydemoserver')
	password = String('yourpassword')

	# Initialize connection object.
    client = Mysql2::Client.new(:host => host, :username => username, :database => database, :password => password)
    puts 'Successfully created connection to database.'

    # Update data
   client.query('UPDATE inventory SET quantity = %d WHERE name = %s;' % [200, '\'banana\''])
   puts 'Updated 1 row of data.'

# Error handling

rescue Exception => e
    puts e.message

# Cleanup

ensure
    client.close if client
    puts 'Done.'
end

データの削除

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

このコードでは、MySQL サーバーに接続し、DELETE コマンドを実行してからサーバーへの接続を閉じるのに、mysql2::client クラスが使用されます。

hostdatabaseusernamepassword の各文字列は、実際の値に置き換えてください。

require 'mysql2'

begin
	# Initialize connection variables.
	host = String('mydemoserver.mysql.database.azure.com')
	database = String('quickstartdb')
    username = String('myadmin@mydemoserver')
	password = String('yourpassword')

	# Initialize connection object.
    client = Mysql2::Client.new(:host => host, :username => username, :database => database, :password => password)
    puts 'Successfully created connection to database.'

    # Delete data
    resultSet = client.query('DELETE FROM inventory WHERE name = %s;' % ['\'orange\''])
    puts 'Deleted 1 row.'

# Error handling


rescue Exception => e
    puts e.message

# Cleanup


ensure
    client.close if client
    puts 'Done.'
end

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

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

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

次のステップ