如何使用sqlx在一个切片中查询mysql?

Kar*_*lom 5 mysql go sqlx

我想在mysql数据库中查询一个表的值IN:

var qids []int
//fill qids dynamically
err = database.SQL.Select(&quotes,
    "SELECT * FROM quote WHERE qid IN $1", qids)
if err != nil {
    log.Println(err)
}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

sql: converting Exec argument #0's type: unsupported type []int, a slice
quotes []
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Yan*_*ozo 12

sqlx有一个很好的帮助:In()我们只需要准备带有args和Rebind的查询,如下所示:

var qids []int

// fills qids on query dynamically
query, args, err := sqlx.In("SELECT * FROM quote WHERE qid IN (?)", qids)
if err != nil {
    log.Fatal(err)
}

// sqlx.In returns queries with the `?` bindvar, we can rebind it for our backend
//
query = database.SQL.Rebind(query)  // database.SQL should be a *sqlx.DB

err = database.SQL.Select(&quotes, query, args...)
if err != nil {
    log.Fatal(err)
}

// or just in one line:

err = database.SQL.Select(&quotes, database.SQL.Rebind(query), args...)
Run Code Online (Sandbox Code Playgroud)

另外我建议你看看这里:http://jmoiron.github.io/sqlx/这里有很多例子,包括IN

  • 这比我希望的要复杂得多,但仍然有效。谢谢。 (3认同)