ユーザ用ツール

サイト用ツール


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

# SQLite の DLL を読み込み
Add-Type -Path ".\System.Data.SQLite.dll"
 
# SQLite データベースのパス
$dbPath = ".\test.db"
$connectionString = "Data Source=$dbPath;Version=3;"
 
# 接続を開く
$connection = New-Object System.Data.SQLite.SQLiteConnection($connectionString)
$connection.Open()
 
# テーブル作成(無ければ作る)
$command = $connection.CreateCommand()
$command.CommandText = @"
CREATE TABLE IF NOT EXISTS people (
    id   INTEGER PRIMARY KEY,
    name TEXT,
    age  INTEGER
);
"@
$command.ExecuteNonQuery() | Out-Null
 
# CSV を読み込み
$csvPath = ".\data.csv"
$rows = Import-Csv -Path $csvPath
 
# トランザクション開始(高速化)
$transaction = $connection.BeginTransaction()
 
foreach ($row in $rows) {
    $command = $connection.CreateCommand()
    $command.CommandText = "INSERT INTO people (id, name, age) VALUES (@id, @name, @age);"
 
    # パラメータに値をバインド
    $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@id",   $row.id)))   | Out-Null
    $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@name", $row.name))) | Out-Null
    $command.Parameters.Add((New-Object System.Data.SQLite.SQLiteParameter("@age",  $row.age)))  | Out-Null
 
    $command.ExecuteNonQuery() | Out-Null
}
 
# コミット
$transaction.Commit()
 
# 接続を閉じる
$connection.Close()
 
Write-Host "CSVデータをSQLiteにインポートしました。"
powershell/sqlite_import_csv.1758724156.txt.gz · 最終更新: 2025/09/24 23:29 by mikoto