获取像python样式的行

时间:2017-04-28 17:30:03

标签: sql go

在python中,它是一个简单的db.query("SELECT id,login,password FROM Users")和返回列表[(1,'root','password'), (2,'toor','password')]。我可以简单地迭代它

for user in response:print("id: %s, login: %s, password: %s", %(user[0],user[1],user[2]))

但是在Golang,我找不到一个简单的方法来做这个例子。

我知道python有动态类型,golang是静态的。所以我正在寻找答案,也许有些库提供了这样的功能?黑客?谢谢你的回答!

2 个答案:

答案 0 :(得分:1)

你需要这样的东西,但如果你使用复杂的mysql的数据类型,比如enum,set等,可能会出现问题。

var (
    result    [][]string
    container []string
    pointers  []interface{}
)

rows, err := db.Query("SELECT id, login, password FROM Users")

if err != nil {
    panic(err.Error())
}

cols, err := rows.Columns()

if err != nil {
    panic(err.Error())
}

length := len(cols)

for rows.Next() {
    pointers = make([]interface{}, length)
    container = make([]string, length)

    for i := range pointers {
        pointers[i] = &container[i]
    }

    err = rows.Scan(pointers...)

    if err != nil {
        panic(err.Error())
    }

    result = append(result, container)
}

然后你可以循环结果并使用fmt包打印它。

答案 1 :(得分:0)

一个很棒的扩展go标准lib sql接口的库是sqlx

使用这个lib,您可以在python中执行与您的示例类似的操作:

db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
if err != nil {    
    log.Fatalln(err)
}
users := []User{}
db.Select(&users, "SELECT id,login,password FROM Users")
//iterate through the users slice