Insert
Bob を使用した SQLite の INSERT クエリの例を示します。
基本的な INSERT
INSERT INTO users (name, email) VALUES (?, ?)
sqlite.Insert("users").
Columns("name", "email").
Values(sqlite.Arg("John Doe"), sqlite.Arg("john@example.com"))
複数行の INSERT
INSERT INTO users (name, email) VALUES
(?, ?),
(?, ?)
sqlite.Insert("users").
Columns("name", "email").
Values(sqlite.Arg("John Doe"), sqlite.Arg("john@example.com")).
Values(sqlite.Arg("Jane Smith"), sqlite.Arg("jane@example.com"))
INSERT OR IGNORE
INSERT OR IGNORE INTO users (name, email) VALUES (?, ?)
sqlite.Insert("users").
OrIgnore().
Columns("name", "email").
Values(sqlite.Arg("John Doe"), sqlite.Arg("john@example.com"))
INSERT OR REPLACE
INSERT OR REPLACE INTO users (id, name, email) VALUES (?, ?, ?)
sqlite.Insert("users").
OrReplace().
Columns("id", "name", "email").
Values(sqlite.Arg(1), sqlite.Arg("John Doe"), sqlite.Arg("john@example.com"))
INSERT SELECT
INSERT INTO backup_users (name, email)
SELECT name, email FROM users WHERE active = ?
selectQuery := sqlite.Select("name", "email").
From("users").
Where(sqlite.Quote("active").EQ(sqlite.Arg(true)))
sqlite.Insert("backup_users").
Columns("name", "email").
Query(selectQuery)
DEFAULT VALUES
INSERT INTO users DEFAULT VALUES
sqlite.Insert("users").
DefaultValues()
JSON データの INSERT
INSERT INTO users (name, metadata) VALUES (?, ?)
metadata := map[string]interface{}{
"age": 30,
"city": "Tokyo",
}
metadataJSON, _ := json.Marshal(metadata)
sqlite.Insert("users").
Columns("name", "metadata").
Values(sqlite.Arg("John Doe"), sqlite.Arg(string(metadataJSON)))
RETURNING 句(SQLite 3.35+)
INSERT INTO users (name, email) VALUES (?, ?)
RETURNING id, created_at
sqlite.Insert("users").
Columns("name", "email").
Values(sqlite.Arg("John Doe"), sqlite.Arg("john@example.com")).
Returning("id", "created_at")
ON CONFLICT 句
INSERT INTO users (email, name) VALUES (?, ?)
ON CONFLICT(email) DO UPDATE SET name = excluded.name
sqlite.Insert("users").
Columns("email", "name").
Values(sqlite.Arg("john@example.com"), sqlite.Arg("John Doe")).
OnConflict("email").
DoUpdate().
Set("name", sqlite.Raw("excluded.name"))
UPSERT パターン
INSERT INTO counters (name, count) VALUES (?, ?)
ON CONFLICT(name) DO UPDATE SET count = count + 1
sqlite.Insert("counters").
Columns("name", "count").
Values(sqlite.Arg("page_views"), sqlite.Arg(1)).
OnConflict("name").
DoUpdate().
Set("count", sqlite.Quote("count").Plus(sqlite.Arg(1)))
これらの例は、Bob を使用して SQLite で実行可能な様々な INSERT クエリパターンを示しています。