go - 多次插入不正确的参数
问题描述
我正在尝试从 CSV 向我的数据库中进行批量插入,并且可以插入单行,但显然批量插入会快得多。构建大规模查询很麻烦,所以我使用了https://godoc.org/github.com/huandu/go-sqlbuilder#InsertBuilder,它似乎正确地构建了查询和参数。
查询生成器和循环:
// prepare insert query
ib := sqlbuilder.NewInsertBuilder()
ib.InsertInto(tableName)
ib.Cols(columns)
// stream file line by line for db ingestion
scanner := csv.NewScanner(file, csv.Comma(','), csv.SkipRecords(1), csv.FieldsPerRecord(-1))
fmt.Println("Uploading data...")
for scanner.Scan() {
// split string by delimeter and trim whitespace if it's not the header row
if count > 0 {
record := scanner.Record()
recordValues := make([]interface{}, len(record))
for i, s := range record {
recordValues[i] = s
}
ib.Values(recordValues...)
}
count++
}
// convert batch to sql
sql, args := ib.Build()
fmt.Println(sql)
fmt.Println(args)
// execute batch
_, err = tx.Exec(sql, args...)
这个查询的输出是这样的(修剪,但看起来正确)
插入表名(第 1-23 列)值(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? , ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?), (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ), ...
而且我什至不会发布 args,因为它是 34k 切片。
现在我们可以看到,所有准备好的语句?
都在那里,那么为什么 sqlx 返回这个错误:
2020/02/14 02:18:22 sql:预期 23 个参数,得到 34477
它似乎只将第一批插入视为准备好的语句,而忽略了其余的。
解决方案
推荐阅读
- html - 带类的元素内的最后一个带类的元素的 CSS 选择器
- jquery - 在 iOS 上的 Safari 中滚动 Bootstrap 导航栏不起作用
- java - W/Firestore:[CustomClassMapper]:Android 类没有设置器/字段
- biztalk - 无法加载文件或程序集
- c# - CRM 插件跟踪日志 - 仅用于沙盒模式的日志
- excel - 如何从 XLS 文件的所有文本框中清除文本,而不删除这些框?
- scroll - 禁用代码镜像元素上的滚动
- python-3.x - 为什么下面的代码没有带来结果?我希望看到一个包含:书名,书价的表格
- corda - Corda - 在合约 jar 上启用签名会导致 deployNodes 任务失败
- url - URL 仅使用 TOR 浏览器解析,否则错误 ERR_NAME_NOT_RESOLVED