ユーザ用ツール

サイト用ツール


powershell:sqlite_import_csv

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
powershell:sqlite_import_csv [2025/09/24 23:29] mikotopowershell:sqlite_import_csv [2025/10/14 00:49] (現在) mikoto
行 54: 行 54:
 $conn.Close() $conn.Close()
 </code> </code>
 +
 ===== 例2 ===== ===== 例2 =====
 +トランザクションを使うことによって、書き込み処理をまとめて実行することができるため処理を高速化できる。
 +**$conn.BeginTransaction()**でトランザクションを開始し、**Comit()**で処理を確定する。
 <code powershell> <code powershell>
-# SQLite の DLL を読み込み +Add-Type -AssemblyName System.Windows.Forms 
-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;Version=3;"+
  
-接続を開く +DBのファイルパス(無ければ新規作成) 
-$connection New-Object System.Data.SQLite.SQLiteConnection($connectionString) +$dbFile "path\to\database\database.db" 
-$connection.Open()+$connStr = "Data Source=$dbFile;Version=3;"
  
-テー作成(無ければ作る) +SQLite 接続オジェクトを作成 
-$command $connection.CreateCommand(+$conn New-Object System.Data.SQLite.SQLiteConnection($connStr
-$command.CommandText = @" +$conn.Open()
-CREATE TABLE IF NOT EXISTS people ( +
-    id   INTEGER PRIMARY KEY, +
-    name TEXT, +
-    age  INTEGER +
-)+
-"@ +
-$command.ExecuteNonQuery() | Out-Null+
  
-# CSV 読み込み +# CSVデータの読み込み 
-$csvPath = ".\data.csv" +$dialog = New-Object System.Windows.Forms.OpenFileDialog 
-$rows Import-Csv -Path $csvPath+$dialog.Filter = "CSVファイル(*.csv)|*.csv|All files (*.*)|*.*
 +$dialog_result = $dialog.ShowDialog()
  
-# トランザクション開始(高速化) +if ($dialog_result -eq [System.Windows.Forms.DialogResult]::OK) { 
-$transaction = $connection.BeginTransaction()+    $csvPath = $dialog.FileName 
 +    $csvData = Import-Csv -Path $csvPath
  
-foreach ($row in $rows{ +    # 処理の高速化のためのトランザクション開始 
-    $command = $connection.CreateCommand() +    $tran = $conn.BeginTransaction(
-    $command.CommandText = "INSERT INTO people (idnameage) VALUES (@id, @name, @age);"+    $cmd = $conn.CreateCommand() 
 +    $cmd.Transaction = $tran 
 +    $cmd.CommandText = "INSERT INTO table_name (datecol1col2) VALUES (@date, @col1, @col2);"
  
-    # パラメータに値バインド +    # パラメータを一度だけ作成する 
-    $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@id",   $row.id)))   | Out-Null +    $null = $cmd.Parameters.Add("@date", [System.Data.DbType]::String
-    $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@name", $row.name))) | Out-Null +    $null = $cmd.Parameters.Add("@col1", [System.Data.DbType]::String
-    $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@age",  $row.age)) | Out-Null+    $null = $cmd.Parameters.Add("@col2", [System.Data.DbType]::String)
  
-    $command.ExecuteNonQuery() | Out-Null +    foreach ($row in $csvData) { 
-}+        $cmd.Parameters["@date"].Value = $row.'date' 
 +        $cmd.Parameters["@col1"].Value = $row.'col1' 
 +        $cmd.Parameters["@col2"].Value = $row.'col2' 
 +        $cmd.ExecuteNonQuery() | Out-Null 
 +    }
  
-# コミット +    トランザクションをコミットする 
-$transaction.Commit()+    $tran.Commit() 
 + 
 +} else { 
 +    [System.Windows.Forms.MessageBox]::Show("処理を中止しました。"
 +}
  
-# 接続を閉じる 
-$connection.Close() 
  
-Write-Host "CSVデータをSQLiteにインポートしました。"+$conn.Close()
 </code> </code>
powershell/sqlite_import_csv.1758724156.txt.gz · 最終更新: 2025/09/24 23:29 by mikoto