Powershellから呼び出せるライブラリは標準の.Netのものだけでも膨大にありますが、それでも別途欲しいライブラリがあったりもします。今回はsqliteを導入してみたいと思います。
管理権限でpowershellを起動
[Win+R]
ファイル名を指定して実行
powershell
[Ctrl]+[Shift]+[Enter]管理者で実行
モジュールのインストール
PS E:\> install-module sqlite
信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
PS E:\>
サンプルスクリプト
#
# SQLiteでDBの作成、テーブルの作成、追加、更新、削除するサンプル
#
# C:\Program Files\WindowsPowerShell\Modules
using namespace System.Data.SQLite
Set-StrictMode -Version Latest
$ErrorActionPreference = "STOP"
# モジュールのインポート
Import-Module SQLite
# データベースファイル
$db_path = "E:\ps1\sqlite\sample.db"
# コネクションオブジェクトの生成
$con = [SQLiteConnection]::new() | % {
$_.ConnectionString = ("Data Source = {0}"-f $db_path)
$_.Open()
$_
}
# テーブル作成
$cmd = [SQLiteCommand]::new()
$cmd.Connection = $con
$cmd.CommandText = @"
CREATE TABLE IF NOT EXISTS sample (
id int,
name text,
primary key(id)
)
"@
$cmd.ExecuteNonQuery() | Out-Null
# レコードの追加
$cmd.CommandText = @"
INSERT INTO sample (id, name) values (1,'hanako')
"@
$cmd.ExecuteNonQuery() | Out-Null
$cmd.CommandText = @"
INSERT INTO sample (id, name) values (2,'taro')
"@
$cmd.ExecuteNonQuery() | Out-Null
# レコードの更新
$cmd.CommandText = @"
UPDATE sample SET name = 'jiro' WHERE id = 2
"@
$cmd.ExecuteNonQuery() | Out-Null
# レコードの削除
$cmd.CommandText = @"
DELETE FROM sample WHERE id = 1
"@
$cmd.ExecuteNonQuery() | Out-Null
# レコードの参照
$cmd.CommandText = @"
SELECT id, name FROM sample
"@
$rec = $cmd.ExecuteReader()
while ($rec.Read()) {
Write-Host ("id:{0} name:{1}" -f $rec['id'], $rec['name'])
}
$rec.Close()
# テーブルの削除
$cmd.CommandText = @"
DROP TABLE IF EXISTS sample;
"@
$cmd.ExecuteNonQuery() | Out-Null
$con.Close()
実行結果
id:2 name:jiro
データベースの作成、テーブルの作成、レコードの挿入、更新、参照、削除、テーブルの削除をするサンプルになります。個人的にこれだけ出来れば、色々な場面に対応出来ます。SQLiteそのものは過去に触れているとは思うのですが、Powershellでの利用は今回初めてになります。無償で導入できるデータベースと言うことで過去にMS Accessのランタイム版を試してみましたが、SQLiteの方が導入も簡単でお勧めです。「Install-Module SQLite」一発で導入が出来るのは非常に素晴らしいと感じました。スクリプトのサンプルを作ってみた感じはどちらも似たような感じです。
今後SQLiteを使った何かを作れればと思います。
シングルクォーテーションを含む文字列を扱う場合
シングルクォーテーションは文字列の区切りに使われるので、エスケープしてあげる必要があります。
エスケープする方法はエスケープしたい文字列の前にシングルクォーテーションを付与します。
ということでシングルクォーテーションが二つ並ぶことに成ります。
コメント