sql.Query的可变参数个数

时间:2017-09-25 18:26:03

标签: postgresql go

我正在尝试将可变数量的参数传递给Go中的db.Query()。我正在做类似的事情:

var values []interface{}
query := []string{"SELECT * FROM table"}
sep := "WHERE"

if ... {
    values = append(values, something)
    query = append(query, fmt.Sprintf(` %s field_a=$%d`, sep, len(values))
    sep = "AND"
}

if ... {
    values = append(values, something)
    query = append(query, fmt.Sprintf(` %s field_b=$%d`, sep, len(values))
    sep = "AND"
}

// Add an arbitrary number of conditional arguments...

rows, err := db.Query(strings.Join(query, " "), values...)

查询看起来很好,值都在那里,但我没有从查询中得到任何回报。一些值是整数,一些字符串。当我在psql中手动尝试完全相同的查询(复制/粘贴)时,我将实际值替换为$ 1,$ 2等,我得到了正确的结果。我错过了什么?

修改

以下是最终查询(strings.Join())的结果应如下所示的示例:

SELECT
    table1.field1, table1.field2, table1.field3,
    table2.field4, table2.field6, table2.field6
FROM table1, table2
WHERE
    table1.field2=$1 AND
    table2.field3 IN ($2, $3)

当我尝试:

SELECT
    table1.field1, table1.field2, table1.field3,
    table2.field4, table2.field6, table2.field6
FROM table1, table2
WHERE
    table1.field2='something' AND
    table2.field3 IN (40, 50)
来自psql

,它运作正常。我打电话的时候:

var values []interface{}
values = append(values, "something")
values = append(values, 40)
values = append(values, 50)
db.Query(`SELECT
    table1.field1, table1.field2, table1.field3,
    table2.field4, table2.field6, table2.field6
FROM table1, table2
WHERE
    table1.field2=$1 AND
    table2.field3 IN ($2, $3)`, values...)
来自Go的

,我得到一个Rows对象,在第一次调用false时返回rows.Next(),并且出现nil错误。

0 个答案:

没有答案