How do I batch sql statements with package database/sql

前端 未结 12 2663
深忆病人
深忆病人 2020-12-04 16:46

How do I batch sql statements with Go\'s database/sql package?

In Java I would do it like this :

// Create a prepared statement
String sql = \"INSERT         


        
12条回答
  •  渐次进展
    2020-12-04 17:19

    Take the idea of Andrew C and adapt it for a need in my work using sql scalar variables. It works perfectly for that specific requirement in my work. Maybe it is useful to someone because it is useful to simulate batch transactions of sql in golang. That's the idea.

    func BulkInsert(unsavedRows []*ExampleRowStruct) error {
        valueStrings := make([]string, 0, len(unsavedRows))
        valueArgs := make([]interface{}, 0, len(unsavedRows) * 3)
        i := 0
        for _, post := range unsavedRows {
            valueStrings = append(valueStrings, fmt.Sprintf("(@p%d, @p%d, @p%d)", i*3+1, i*3+2, i*3+3))
            valueArgs = append(valueArgs, post.Column1)
            valueArgs = append(valueArgs, post.Column2)
            valueArgs = append(valueArgs, post.Column3)
            i++
        }
        sqlQuery := fmt.Sprintf("INSERT INTO my_sample_table (column1, column2, column3) VALUES %s", strings.Join(valueStrings, ","))
    
        var params []interface{}
    
        for i := 0; i < len(valueArgs); i++ {
            var param sql.NamedArg
            param.Name = fmt.Sprintf("p%v", i+1)
            param.Value = valueArgs[i]
            params = append(params, param)
        }
    
        _, err := db.Exec(sqlQuery, params...)
        return err
    }
    

提交回复
热议问题