powershell:sqlite_import_csv
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| powershell:sqlite_import_csv [2025/09/24 23:29] – mikoto | powershell:sqlite_import_csv [2025/10/15 07:29] (現在) – mikoto | ||
|---|---|---|---|
| 行 54: | 行 54: | ||
| $conn.Close() | $conn.Close() | ||
| </ | </ | ||
| + | |||
| ===== 例2 ===== | ===== 例2 ===== | ||
| + | トランザクションを使うことによって、書き込み処理をまとめて実行することができるため処理を高速化できる。 | ||
| + | **$conn.BeginTransaction()**でトランザクションを開始し、**Comit()**で処理を確定する。 | ||
| <code powershell> | <code powershell> | ||
| - | # SQLite の DLL を読み込み | + | Add-Type -AssemblyName |
| - | Add-Type -Path ".\System.Data.SQLite.dll" | + | Add-Type -AssemblyName System.Drawing |
| - | # SQLite データベースのパス | + | # sqlite3.dll を読み込む |
| - | $dbPath = ".\test.db" | + | Add-Type -Path "path\to\dll\System.Data.SQLite.dll" |
| - | $connectionString = "Data Source=$dbPath; | + | |
| - | # 接続を開く | + | # DBのファイルパス(無ければ新規作成) |
| - | $connection | + | $dbFile |
| - | $connection.Open() | + | $connStr = "Data Source=$dbFile; |
| - | # テーブル作成(無ければ作る) | + | # SQLite 接続オブジェクトを作成 |
| - | $command | + | $conn = New-Object System.Data.SQLite.SQLiteConnection($connStr) |
| - | $command.CommandText = @" | + | $conn.Open() |
| - | CREATE TABLE IF NOT EXISTS people ( | + | |
| - | id | + | |
| - | name TEXT, | + | |
| - | age INTEGER | + | |
| - | ); | + | |
| - | "@ | + | |
| - | $command.ExecuteNonQuery() | Out-Null | + | |
| - | # CSV を読み込み | + | # CSVデータの読み込み |
| - | $csvPath | + | $dialog = New-Object System.Windows.Forms.OpenFileDialog |
| - | $rows = Import-Csv -Path $csvPath | + | $dialog.Filter |
| + | $dialog_result | ||
| - | # トランザクション開始(高速化) | + | if ($dialog_result -eq [System.Windows.Forms.DialogResult]:: |
| - | $transaction | + | $csvPath |
| + | $csvData = Import-Csv -Path $csvPath | ||
| - | foreach ($row in $rows) { | + | # 処理の高速化のためのトランザクション開始 |
| - | $command | + | |
| - | $command.CommandText = " | + | $cmd = $conn.CreateCommand() |
| + | $cmd.Transaction = $tran | ||
| + | $cmd.CommandText = " | ||
| - | # パラメータに値をバインド | + | # パラメータを一度だけ作成する |
| - | $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@id", | + | $null = $cmd.Parameters.Add(" |
| - | $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@name", | + | $null = $cmd.Parameters.Add(" |
| - | $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@age", | + | $null = $cmd.Parameters.Add(" |
| - | $command.ExecuteNonQuery() | Out-Null | + | |
| + | | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.ExecuteNonQuery() | Out-Null | ||
| + | } | ||
| + | |||
| + | # トランザクションをコミットする | ||
| + | $tran.Commit() | ||
| + | |||
| + | } else { | ||
| + | [System.Windows.Forms.MessageBox]:: | ||
| } | } | ||
| - | # コミット | ||
| - | $transaction.Commit() | ||
| - | # 接続を閉じる | + | $conn.Close() |
| - | $connection.Close() | + | </ |
| + | |||
| + | ===== TSVのインポート ===== | ||
| + | |||
| + | <code powershell> | ||
| + | Add-Type -AssemblyName System.Windows.Forms | ||
| + | Add-Type -AssemblyName System.Drawing | ||
| + | |||
| + | # sqlite3.dll を読み込む | ||
| + | Add-Type -Path " | ||
| + | |||
| + | # DBのファイルパス(無ければ新規作成) | ||
| + | $dbFile = " | ||
| + | $connStr = "Data Source=$dbFile; | ||
| + | |||
| + | $sql = @" | ||
| + | INSERT INTO share | ||
| + | (code, campany, quantity, obtained_price, | ||
| + | VALUES | ||
| + | (@code, @campany, @quantity, @obtained_price, | ||
| + | "@ | ||
| + | |||
| + | # SQLite | ||
| + | $conn = New-Object System.Data.SQLite.SQLiteConnection($connStr) | ||
| + | $conn.Open() | ||
| + | |||
| + | # CSVデータの読み込み | ||
| + | $dialog = New-Object System.Windows.Forms.OpenFileDialog | ||
| + | # | ||
| + | $dialog.Filter = " | ||
| + | $dialog_result = $dialog.ShowDialog() | ||
| + | |||
| + | if ($dialog_result -eq [System.Windows.Forms.DialogResult]:: | ||
| + | $csvPath = $dialog.FileName | ||
| + | $csvData = Import-Csv -Path $csvPath -Delimiter " | ||
| + | $csvData | ||
| + | # 処理の高速化のためのトランザクション開始 | ||
| + | $tran = $conn.BeginTransaction() | ||
| + | $cmd = $conn.CreateCommand() | ||
| + | $cmd.Transaction = $tran | ||
| + | $cmd.CommandText = $sql | ||
| + | # パラメータを一度だけ作成する | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | |||
| + | foreach ($row in $csvData) { | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.ExecuteNonQuery() | Out-Null | ||
| + | } | ||
| + | |||
| + | # トランザクションをコミットする | ||
| + | $tran.Commit() | ||
| + | |||
| + | } else { | ||
| + | [System.Windows.Forms.MessageBox]:: | ||
| + | } | ||
| - | Write-Host " | + | $conn.Close() |
| </ | </ | ||
powershell/sqlite_import_csv.1758724156.txt.gz · 最終更新: 2025/09/24 23:29 by mikoto