3

我想在 Go 中使用“database/sql”包运行这样的查询:

SELECT id, name FROM users WHERE id IN (1,2,3,4);

如何在查询命令中使用变量替换?例如,我想这样做(这当然行不通):

db.Query("SELECT id, name FROM users WHERE id IN (?)", []int{1,2,3,4})
4

1 回答 1

2

@Volker 在评论中建议某些数据库驱动程序可能能够为您扩展切片。任何驱动程序都可以单独处理切片元素,但是:

db.Query("SELECT id, name FROM users WHERE id IN (?, ?, ?, ?)", 1, 2, 3, 4)

当然,当您编写该代码时,您需要确切地知道切片中有多少元素,但情况可能并非如此。生成正确数量的问号非常简单,并为您提供了一个通用解决方案:

ints := []interface{}{1,2,3,4}
marks := strings.Repeat("?,", len(ints) - 1) + "?"
db.Query("SELECT id, name FROM users WHERE id IN (" + marks + ")", ints...)

如果您的切片可能是空的,您将不得不以某种方式处理它。

于 2013-05-19T07:56:28.540 回答