基本上,在执行查询之后,我希望获得结果行并生成一个[]map[string]interface{}
,但是我不知道如何使用该API来实现这一点,因为Rows.Scan()
函数需要特定数量的参数来匹配请求的列数(可能还有类型)才能正确地获取数据。
同样,我想对此调用进行泛化,并接受任何查询并将其转换为[]map[string]interface{}
,其中映射包含映射到该行的值的列名。
这可能是非常低效的,我计划稍后更改结构,以便interface{}
成为单个数据点的结构。
如何仅使用database/sql包,或者如果需要,使用database/sql/driver包?
发布于 2013-07-25 12:04:47
看看使用sqlx,它比标准的数据库/sql库更容易做到这一点:
places := []Place{}
err := db.Select(&places, "SELECT * FROM place ORDER BY telcode ASC")
if err != nil {
fmt.Printf(err)
return
}
显然,您可以将[]Place{}
替换为[]map[string]interface{}
,但如果您知道数据库的结构,那么在可能的情况下最好使用结构。您不需要像在interface{}
上那样进行任何类型断言。
发布于 2013-07-25 02:50:20
我还没有用过它,但我相信(或多或少)做你所要求的事情的“常见”方法是使用gorp。
发布于 2018-02-02 22:30:56
如果你真的想要一个map,这在某些情况下是需要的,可以看看dbr,但是你需要使用fork (因为pr在原始的repo中被拒绝了)。不管怎样,fork看起来更新了:
有关如何使用它的信息,请参阅:
https://stackoverflow.com/questions/17840963
复制相似问题