powershell:sqlite_import_csv
文書の過去の版を表示しています。
CSVをSQLiteのテーブルにインポートする
例1
# CSVやTSVのデータをSQLiteでデータベースにインポートする # CSVを読み込み #$data = Import-Csv -Path .\list.tsv -Delimiter "`t" # タブ区切り #$data = Import-Csv -Path .\list.csv -Delimiter ";" # セミコロン区切り $data = Import-Csv -Path .\list.csv $data | Format-Table # sqlite3.dll を読み込む Add-Type -Path ".\System.Data.SQLite.dll" # DBのファイルパス(無ければ新規作成) $dbFile = ".\test.db" $connectionString = "Data Source=$dbFile;Version=3;" if (-not (Test-Path $dbFile)) { [System.Data.SQLite.SQLiteConnection]::CreateFile($dbFile) } # SQLite 接続オブジェクトを作成 $conn = New-Object System.Data.SQLite.SQLiteConnection($connectionString) $conn.Open() # コマンドオブジェクト $cmd = $conn.CreateCommand() # テーブルがない場合は作成 $cmd.CommandText = @" CREATE TABLE IF NOT EXISTS logs ( date TEXT NOT NULL, level TEXT, detail TEXT ); "@ $cmd.ExecuteNonQuery() foreach ($row in $data) { $cmd = $conn.CreateCommand() $cmd.CommandText = "INSERT INTO logs (date, level, detail) VALUES (@date, @level, @detail)" $cmd.Parameters.AddWithValue("@date", $row.date) | Out-Null $cmd.Parameters.AddWithValue("@level", $row.level) | Out-Null $cmd.Parameters.AddWithValue("@detail", $row.detail) | Out-Null $cmd.ExecuteNonQuery() } $conn.Close()
例2
トランザクションを使うことによって、書き込み処理をまとめて実行することができるため処理を高速化できる。 $conn.BeginTransaction()でトランザクションを開始し、Comit()で処理を確定する。
# ツールのRootDirectory $psRoot = "path\to\woridir" # sqlite3.dll を読み込む Add-Type -Path "$psRoot\dll\System.Data.SQLite.dll" # DBのファイルパス(無ければ新規作成) $dbFile = "$psRoot\databases\file.db" $connStr = "Data Source=$dbFile;Version=3;" # CSV読み込み $csvData = Import-Csv -Path "$psRoot\csvfile.csv" -Encoding Default # SQLite 接続オブジェクトを作成 $conn = New-Object System.Data.SQLite.SQLiteConnection($connStr) $conn.Open() # 処理の高速化のためトランザクション開始 $tran = $conn.BeginTransaction() $cmd = $conn.CreateCommand() $cmd.CommandText = "INSERT INTO haru_master (shop, product_name, url) VALUES (@shop, @product, @url);" # パラメータを一度だけ作成 $null = $cmd.Parameters.Add("@shop", [System.Data.DbType]::String) $null = $cmd.Parameters.Add("@product", [System.Data.DbType]::String) $null = $cmd.Parameters.Add("@url", [System.Data.DbType]::String) foreach ($row in $csvData) { $cmd.Parameters["@shop"].Value = $row.shop $cmd.Parameters["@product"].Value = $row.product $cmd.Parameters["@url"].Value = $row.url $cmd.ExecuteNonQuery() | Out-Null } # トランザクションをコミット $tran.Commit() $conn.Close()
powershell/sqlite_import_csv.1759072868.txt.gz · 最終更新: 2025/09/29 00:21 by mikoto