1 回答
TA贡献1875条经验 获得超3个赞
要使用 Gorm 将单个列值选择到切片中,可以使用db.Pluck帮助器:
var tables []string
if err := db.Table("information_schema.tables").Where("table_schema = ?", "public").Pluck("table_name", &tables).Error; err != nil {
panic(err)
}
TS;WM
考虑到这一点,SELECT 语句返回一组包含一个或多个列的行。为了将它们映射到 Go 代码,我们需要一种结构,以便 Gorm 可以了解哪个列映射到结构的哪个字段。即使您只选择 1 个单列,它也只是一个具有 1 个单字段的结构。
type Table struct {
TableName string
// more fields if needed...
}
所以你的输出变量应该是[]*Table:
var tables []*Table
if err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Find(&tables).Error; err != nil {
panic(err)
}
注意:[]Table如果您不想修改切片内的元素,也可以这样做。
如果您不想定义结构,则可以使用该db.Pluck函数,它只是此类代码的助手:
rows, err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Rows()
defer rows.Close()
var tables []string
var name string
for rows.Next() {
row.Scan(&name)
tables = append(tables, name)
}
- 1 回答
- 0 关注
- 343 浏览
添加回答
举报