ユーザ用ツール

サイト用ツール


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

# ツールの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.1759072658.txt.gz · 最終更新: 2025/09/29 00:17 by mikoto