powershell:sqlite_import_csv
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| powershell:sqlite_import_csv [2025/09/29 00:17] – mikoto | powershell:sqlite_import_csv [2025/10/15 07:29] (現在) – mikoto | ||
|---|---|---|---|
| 行 56: | 行 56: | ||
| ===== 例2 ===== | ===== 例2 ===== | ||
| + | トランザクションを使うことによって、書き込み処理をまとめて実行することができるため処理を高速化できる。 | ||
| + | **$conn.BeginTransaction()**でトランザクションを開始し、**Comit()**で処理を確定する。 | ||
| <code powershell> | <code powershell> | ||
| - | # ツールのRootDirectory | + | Add-Type -AssemblyName System.Windows.Forms |
| - | $psRoot = " | + | Add-Type -AssemblyName System.Drawing |
| # sqlite3.dll を読み込む | # sqlite3.dll を読み込む | ||
| - | Add-Type -Path "$psRoot\dll\System.Data.SQLite.dll" | + | Add-Type -Path "path\to\dll\System.Data.SQLite.dll" |
| # DBのファイルパス(無ければ新規作成) | # DBのファイルパス(無ければ新規作成) | ||
| - | $dbFile = "$psRoot\databases\file.db" | + | $dbFile = "path\to\database\database.db" |
| $connStr = "Data Source=$dbFile; | $connStr = "Data Source=$dbFile; | ||
| - | # CSV読み込み | + | # SQLite 接続オブジェクトを作成 |
| - | $csvData = Import-Csv -Path "$psRoot\csvfile.csv" -Encoding Default | + | $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 | ||
| + | | ||
| + | |||
| + | # 処理の高速化のためのトランザクション開始 | ||
| + | $tran = $conn.BeginTransaction() | ||
| + | $cmd = $conn.CreateCommand() | ||
| + | $cmd.Transaction = $tran | ||
| + | $cmd.CommandText = "INSERT INTO table_name (date, col1, col2) VALUES (@date, @col1, @col2);" | ||
| + | |||
| + | # パラメータを一度だけ作成する | ||
| + | | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | |||
| + | foreach ($row in $csvData) { | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.ExecuteNonQuery() | Out-Null | ||
| + | } | ||
| + | |||
| + | # トランザクションをコミットする | ||
| + | $tran.Commit() | ||
| + | |||
| + | } else { | ||
| + | [System.Windows.Forms.MessageBox]:: | ||
| + | } | ||
| + | |||
| + | |||
| + | $conn.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 接続オブジェクトを作成 | # SQLite 接続オブジェクトを作成 | ||
| 行 73: | 行 135: | ||
| $conn.Open() | $conn.Open() | ||
| - | # 処理の高速化のためトランザクション開始 | + | # CSVデータの読み込み |
| - | $tran = $conn.BeginTransaction() | + | $dialog = New-Object System.Windows.Forms.OpenFileDialog |
| - | $cmd = $conn.CreateCommand() | + | # |
| - | $cmd.CommandText = "INSERT INTO haru_master | + | $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() | ||
| + | | ||
| + | | ||
| + | # パラメータを一度だけ作成する | ||
| + | $null = $cmd.Parameters.Add("@code", | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add("@quantity" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | $null = $cmd.Parameters.Add(" | ||
| + | |||
| + | foreach ($row in $csvData) { | ||
| + | $cmd.Parameters["@code" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.Parameters[" | ||
| + | $cmd.ExecuteNonQuery() | Out-Null | ||
| + | } | ||
| - | # パラメータを一度だけ作成 | + | |
| - | $null = $cmd.Parameters.Add(" | + | $tran.Commit() |
| - | $null = $cmd.Parameters.Add(" | + | |
| - | $null = $cmd.Parameters.Add(" | + | |
| - | foreach ($row in $csvData) | + | } else { |
| - | | + | [System.Windows.Forms.MessageBox]::Show("処理を中止しました。") |
| - | $cmd.Parameters[" | + | |
| - | $cmd.Parameters["@url"].Value | + | |
| - | $cmd.ExecuteNonQuery() | Out-Null | + | |
| } | } | ||
| - | # トランザクションをコミット | ||
| - | $tran.Commit() | ||
| $conn.Close() | $conn.Close() | ||
| </ | </ | ||
powershell/sqlite_import_csv.1759072658.txt.gz · 最終更新: 2025/09/29 00:17 by mikoto