【PowerShell】PowerShellからMySQLのテーブルデータを取得するには

この記事では、PowerShellからMySQLのテーブルデータを取得する方法についてご説明します。

【動画】PowerShellからMySQLのテーブルデータを取得する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


まずPowerShellからMySQLを操作するための「MySql.Data.dll」を読み込みます。

そのあとに接続文字列を設定し、PowerShellからMySQLのデータベースに接続します。

接続したら、取得先のテーブルに対してSELECT文を実行してテーブルデータを取得しています。

今回はコンソール上に取得したデータを表示させています。

コードの流れ

STEP.1
PowerShellからMySQLを操作するための「MySql.Data.dll」を読み込む
PowerShellからMySQLを操作するための「MySql.Data.dll」を読み込みます。
PowerShellからMySQLを操作するには「MySql.Data.dll」を読み込む必要があります。
STEP.2
接続文字列を設定する
接続文字列を設定します。
ここでは、MySQL接続先のサーバ名、データベース名、ユーザ名、パスワードを指定します。
STEP.3
SELECT文を設定する
SELECT文を設定します。
STEP.4
MySqlCommandオブジェクトを生成してMySQLのデータベースファイルに接続する
MySqlCommandオブジェクトを生成してMySQLのデータベースファイルに接続します。
STEP.5
SELECT文を実行する
SELECT文を実行します。
STEP.6
SELECT文を実行した結果を表示する
SELECT文を実行した結果を表示します。
STEP.7
MySQLのデータベースファイルへの接続を閉じる
MySQLのデータベースファイルへの接続を閉じます。

MySQLのデータベース・テーブルの例

今回は下のMySQLのデータベースとテーブルを用意しました。

MySQLのデータベースには「syain」のテーブルが存在しており、10件のデータが存在しています。

今回はこの10件のデータをPowerShellが取得してコンソール上に表示させます。

表示させた結果は下のとおりです。

PowerShellのコード(例)

# PowerShellからMySQLを操作するための「MySql.Data.dll」のフルパスを取得する
$diiPath = "C:\Program Files (x86)\MySQL\MySQL Installer for Windows\MySql.Data.dll"

# 「MySql.Data.dll」を読み込む
[System.Reflection.Assembly]::LoadFile($diiPath) | Out-Null

# MySQL接続文字列を設定する
$server = "localhost"
$database = "testdb"
$user = "root"
$password = "testPass@123456"

# 接続文字列を設定する
$connectionString = "Server=$server;Database=$database;Uid=$user;Pwd=$password;"

# MySqlConnectionオブジェクトを生成する
$connection = New-Object MySql.Data.MySqlClient.MySqlConnection($connectionString)

# SELECT文を設定する
$query = "SELECT * FROM syain"

# MySqlCommandオブジェクトを生成する
$command = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $connection)

# データベースに接続する
$connection.Open()

# SELECT文を実行する
$reader = $command.ExecuteReader()

# 空の配列を用意する
$table = @()

# テーブルのフィールド名をすべて取得する
$columnNames = $reader.GetSchemaTable() | Select -Expand ColumnName

# 取得したデータの最終行まで処理を繰り返すwhileループ
while ($reader.Read()) {

    # 1行分のデータを格納するPSObjectインスタンスを生成し、rowに格納する
    $row = New-Object PSObject

    # フィールドの数だけ処理を繰り返すforeachループ
    foreach ($columnName in $columnNames) {

        # rowに行のデータを格納する
        $row | Add-Member -MemberType NoteProperty -Name $columnName -Value $reader[$columnName]
    }

    # tableにrowの値を追加で格納する
    $table += $row
}

# 表形式でtableの値を出力する
$table | Format-Table -AutoSize

# データベースとの接続を閉じる
$connection.Close()

注目すべきコード①

最初に見て頂きたいのは2行目から5行目です。

# PowerShellからMySQLを操作するための「MySql.Data.dll」のフルパスを取得する
$diiPath = "C:\Program Files (x86)\MySQL\MySQL Installer for Windows\MySql.Data.dll"

# 「MySql.Data.dll」を読み込む
[System.Reflection.Assembly]::LoadFile($diiPath) | Out-Null

コードの説明

以上のコードは、PowerShellからMySQLを操作するための「MySql.Data.dll」を読み込むコードです。

「MySql.Data.dll」はPowerShellからMySQLを操作するのに必要なファイルで、PowerShellからMySQLへの接続やSQLクエリの実行などが可能になります。

「MySql.Data.dll」を読み込まないとMySQLへの操作ができないので、「MySql.Data.dll」の読み込みを忘れないようにしましょう。

「MySql.Data.dll」の読み込みはLoadFileメソッドの引数に「MySql.Data.dll」のフルパスを指定して実行します。

ちなみに、私のPCの環境では「C:\Program Files (x86)\MySQL\MySQL Installer for Windows」配下にある「MySql.Data.dll」を参照しています。

注目すべきコード②

次に見て頂きたいのは8行目から11行目です。

# MySQL接続文字列を設定する
$server = "localhost"
$database = "testdb"
$user = "root"
$password = "testPass@123456"

コードの説明

以上のコードは、SQL Serverの接続情報を設定するコードです。

接続先のサーバ名、データベース名、ユーザ名、パスワードをここで指定します。

【参考】MySQLへの接続情報

注目すべきコード③

次に見て頂きたいのは14行目から17行目です。

# 接続文字列を設定する
$connectionString = "Server=$server;Database=$database;Uid=$user;Pwd=$password;"

# MySqlConnectionオブジェクトを生成する
$connection = New-Object MySql.Data.MySqlClient.MySqlConnection($connectionString)

コードの説明

以上のコードは、接続文字列を作成してMySqlConnectionオブジェクトを生成するコードです。

MySQLのデータベースに接続するための接続情報をconnectionオブジェクトに格納します。

このコードにより、どのMySQLのデータベースファイルに接続するのか、PowerShellが認識できるようになります。

注目すべきコード④

次に見て頂きたいのは20行目から23行目です。

# SELECT文を設定する
$query = "SELECT * FROM syain"

# MySqlCommandオブジェクトを生成する
$command = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $connection)

コードの説明

以上のコードは、SELECT文を取得し、そのSELECT文をMySqlCommandメソッドに渡してMySqlCommandオブジェクトを生成するコードです。

MySqlCommandオブジェクトを生成することで、SELECT文を実行することができるようになります。

注目すべきコード⑤

次に見て頂きたいのは26行目です。

# データベースに接続する
$connection.Open()

コードの説明

以上のコードは、PowerShellがデータベースに接続する処理のコードです。

注目すべきコード⑥

次に見て頂きたいのは29行目です。

# SELECT文を実行する
$reader = $command.ExecuteReader()

コードの説明

以上のコードは、SELECT文を実行する処理のコードです。

実行したSELECT文が抽出したデータはreaderに格納されます。

注目すべきコード⑦

次に見て頂きたいのは32行目です。

# 空の配列を用意する
$table = @()

コードの説明

以上のコードは、実行したSELECT文が抽出したデータを格納する配列を用意するコードです。

コンソールに出力する情報をすべて格納しておく「箱」をここで用意しておきます。

注目すべきコード⑧

次に見て頂きたいのは35行目です。

# テーブルのフィールド名をすべて取得する
$columnNames = $reader.GetSchemaTable() | Select -Expand ColumnName

コードの説明

以上のコードは、テーブルのフィールド名をすべて取得するコードです。

今回は「syain」のテーブルに対してSELECT文を実行しているので、「syain」テーブルにあるフィールド名をすべて取得し、columnNamesに格納しています。

「t_item」のフィールド名は「id」「name」「address」「age」の4つのフィールドがあるので、この4つ全てのフィールド名がcolumnNamesに格納されます。

注目すべきコード⑨

次に見て頂きたいのは38行目です。

# 取得したデータの最終行まで処理を繰り返すwhileループ
while ($reader.Read()) {

コードの説明

以上のコードは、取得したデータの最終行まで処理を繰り返すwhile文です。

今回は10件あるテーブルデータを取得しているので10件目まで処理を繰り返します。

注目すべきコード⑩

次に見て頂きたいのは41行目から51行目です。

    # 1行分のデータを格納するPSObjectインスタンスを生成し、rowに格納する
    $row = New-Object PSObject

    # フィールドの数だけ処理を繰り返すforeachループ
    foreach ($columnName in $columnNames) {

        # rowに行のデータを格納する
        $row | Add-Member -MemberType NoteProperty -Name $columnName -Value $reader[$columnName]
    }

    # tableにrowの値を追加で格納する
    $table += $row

コードの説明

以上のコードは、取得したテーブルデータをtableに格納する処理のコードです。

取得したテーブルデータを1行ずつ取得し、tableに格納していきます。

コードの詳細

41行目のコードは、新しいPowerShellオブジェクトのPSObjectを生成し、rowという変数に格納します。

44行目のコードは、フィールドの数だけ処理を繰り返すforeachです。

「t_item」のフィールドは「項番」「名前」「単価」「在庫」の4つなので、4回処理を繰り返します。

47行目のコードでは、rowに行のデータを格納しています。

rowへの追加はAdd-Memberコマンドレットを実行します。

Add-Memberコマンドレットに「-MemberType NoteProperty」パラメータを指定することで、追加するメンバー(プロパティやメソッドなど)の種類を指定します。

「-MemberType NoteProperty」パラメータは値を格納するために指定します。

「-Name」パラメータにcolumnNameを指定し、「-Value」パラメータに$reader[$columnName]を指定します。

columnNameには現在のフィールド名が、$reader[$columnName]には現在の列の値が格納されています。

各行のデータが一つのPSObject(PowerShellオブジェクト)としてまとまり、そのプロパティとして各列のデータが格納されます。

51行目のコードは、tableにrowの値を追加で格納します。

注目すべきコード⑪

次に見て頂きたいのは55行目です。

# 表形式でtableの値を出力する
$table | Format-Table -AutoSize

コードの説明

以上のコードは、表形式でtableの値を出力するコードです。

注目すべきコード⑫

次に見て頂きたいのは58行目です。

# データベースとの接続を閉じる
$connection.Close()

コードの説明

以上のコードは、データベースとの接続を閉じる処理のコードです。

動作確認

MySQLのデータベースファイルの例」をご覧ください。

最後に

この記事では、PowerShellからMySQLのテーブルデータを取得する方法についてご説明します。

PowerShellからMySQLのテーブルデータを取得したい場合は本記事を参考にして頂けたら幸いです。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら