gpt4 book ai didi

sql - 如何使用包 database/sql 批处理 sql 语句

转载 作者:IT老高 更新时间:2023-10-28 13:00:46 25 4
gpt4 key购买 nike

如何使用 Go 的 database/sql 包批处理 sql 语句?

在 Java 中我会这样做:

// Create a prepared statement
String sql = "INSERT INTO my_table VALUES(?)";
PreparedStatement pstmt = connection.prepareStatement(sql);

// Insert 10 rows of data
for (int i=0; i<10; i++) {
pstmt.setString(1, ""+i);
pstmt.addBatch();
}

// Execute the batch
int [] updateCounts = pstmt.executeBatch();

我如何在 Go 中实现同样的目标?

最佳答案

因为 db.Exec 函数是 variadic ,一种选择(实际上只进行一次网络往返)是自己构造语句并分解参数并将它们传递进来。

示例代码:

func BulkInsert(unsavedRows []*ExampleRowStruct) error {
valueStrings := make([]string, 0, len(unsavedRows))
valueArgs := make([]interface{}, 0, len(unsavedRows) * 3)
for _, post := range unsavedRows {
valueStrings = append(valueStrings, "(?, ?, ?)")
valueArgs = append(valueArgs, post.Column1)
valueArgs = append(valueArgs, post.Column2)
valueArgs = append(valueArgs, post.Column3)
}
stmt := fmt.Sprintf("INSERT INTO my_sample_table (column1, column2, column3) VALUES %s",
strings.Join(valueStrings, ","))
_, err := db.Exec(stmt, valueArgs...)
return err
}

在我运行的一个简单测试中,该解决方案在插入 10,000 行时比另一个答案中提出的 Begin、Prepare、Commit 快了大约 4 倍 - 尽管实际改进很大程度上取决于您的个人设置、网络延迟、等等

关于sql - 如何使用包 database/sql 批处理 sql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com