2023.06.18  

【Go】複数のデータをまとめてDBにINSERTする(バルクインサート)

Go,  SQL    

Go言語で複数のデータをまとめてDBにINSERTする(バルクインサート)方法をメモ書きします。

test_tableidnameカラムに次の四件のレコードを追加するものとします。
[][]string{{"1", "Sato"}, {"2", "Suzuki"}, {"3", "Tanaka"}, {"4", "Saito"}}

func Insert(db *sqlx.DB) error {

        // INSERTを行うデータのリスト(id, name)
    list := [][]string{{"1", "Sato"}, {"2", "Suzuki"}, {"3", "Tanaka"}, {"4", "Saito"}}


    // SQL文の生成
    sql := "INSERT INTO test_table (id, name) VALUES "
    // VALUES部分の生成
    for _, row := range list {
        sql += fmt.Sprintf("('%v', '%v'),", row[0], row[1])
    }
    sql = sql[:len(sql)-1]


    // 必要があればコンテキストを生成する
    // ctx := app.NewContext(context.Background(), txn)


    // SQLの解析
    st, err := db.Prepare(sql)
   // コンテキストを使う場合は下記に書き換える
   // st, err := tx.PreparexContext(ctx, sql)
    if err != nil {
        return fmt.Errorf("Prepareで失敗しました:%v", err)
    }
    defer func() {
        if err := st.Close(); err != nil {
            log.Printf("Prepareのクローズで失敗しました: %v", err)
        }
    }()


    // SQLの実行()
    res, err := st.Exec()
    // コンテキストを使う場合は下記に書き換える
    // res, err := st.ExecContext(ctx)
    if err != nil {
        return fmt.Errorf("SQLの実行に失敗しました:%v", err)
    }

    return nil
}

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信