为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Go / GORM 在没有预定义结构的情况下打印 SELECT 查询输出

如何使用 Go / GORM 在没有预定义结构的情况下打印 SELECT 查询输出

Go
忽然笑 2023-01-03 16:02:17
我正在开发一个 API,使用Go它连接到 MySQL 数据库以执行某些查询。正在GORM用于数据库操作。但是我坚持打印SELECT没有列名的表的查询输出。我的用例是,我需要在多个表上运行查询,而我不知道它们的列名和类型是什么。因此,我无法为所有可能添加的当前和未来表预定义结构。有没有办法在SELECT没有预定义的情况下打印/保存查询输出struct?我尝试使用空结构做一些事情,但它对我没有帮助。PS:我是围棋的初学者    type Testing struct{}    var test Testing    dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", myds.DBuser, myds.DBpassword, myds.DBhost, myds.DBport, myds.DBname)    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})    if err != nil {        fmt.Println(err)    }    tx := db.Raw(query).Scan(&test)    if tx.Error != nil {        fmt.Println(tx.Error)    }    fmt.Println(test)
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您可以使用匿名结构


假设您有一个结构:


type User struct{

  FirstName string

  LastName string

}

查询:


SELECT CONCAT(first_name,last_name) AS full_name from users;

注意新栏full_name


你可以简单地做


var fullName = struct{FullName string}{}

请注意我如何使用 pascal 大小写 & FullName 必须是字段名称

中间的大写字母将表示_

字段是公共的,因此可以在外部访问。


full_name(查询)= FullName(字段)


将此 fullName 对象作为存储桶传递给您的扫描,它应该可以工作。


db.Raw(查询).Scan(&全名)


编辑:


您的查询会有一些结果吗?

让我假设你有


column_one,column_two... column_n

现在,要从所有列或选定的列中获取数据,您只需定义具有特定名称的字段(在匿名结构中)。在我们的例子中:


struct{ColumnOne,ColumnTwo,..ColumnN interface{}}{}

PS 我已经使用过interface{},您可以根据列返回的数据使用类型。


查看完整回答
反对 回复 2023-01-03
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

它通过使用带有界面的地图类型为我工作。这帮助我保存了SELECT没有预定义结构或列名的查询结果。


    dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", myds.DBuser, myds.DBpassword, myds.DBhost, myds.DBport, myds.DBname)


    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

    if err != nil {

        fmt.Println(err)

    }


    var result []map[string]interface{}


    tx := db.Raw(query).Scan(&result)

    if tx.Error != nil {

        fmt.Println(tx.Error)

        return

    }

    bytes, _ := json.Marshal(result)

    fmt.Println(string(bytes))


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 373 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号