【问题标题】:Gorm empty Find to MapGorm empty 查找地图
【发布时间】:2021-06-25 08:50:05
【问题描述】:

我目前正在使用 gorm 查询 GO 中的 MySql 数据库。我正在查询一个表,我只知道它的名字,不知道别的。出于这个原因,我从查询 []map[string]interface{} 返回,正如 gorm 文档中所建议的那样(查找地图,https://gorm.io/docs/advanced_query.html#Find-To-Map)。

我有以下问题:查询返回正确数量的元素,但是是空映射(例如[map[] map[] map[] map[]])。我不知道如何解决这个问题,有人可以帮助我了解问题所在吗?

谢谢。

编辑

代码示例:

db, err := gorm.Open("mysql", "connection_to_my_db")
[...]
var results []map[string]interface{}
err := db.Table("MyTable").Where("condition = ?", id).Find(&results).Error
if err != nil {
    return nil, err
}
[...]

【问题讨论】:

  • 你能显示你试过的代码吗?
  • 基本上,代码与文档中的“查找地图”示例相同。我只设置了我的表名。它返回正确数量的元素,但它们是空的。
  • 请你把它贴出来 - 让我们看看发生了什么?这是一个完整的工作示例,说明如何使用 scan to map[string]interface 方法:play.golang.org/p/3JyqfRXwSji
  • 贴出的代码是我可以给你看的,对不起。
  • 你能说明你在哪里定义了results 变量吗?

标签: mysql go go-gorm


【解决方案1】:

确保您使用的是 Gorm V2

git release tag 1.2. Gorm V1 不支持查找到地图。查看此处有关如何升级https://gorm.io/docs/v2_release_note.html#How-To-Upgrade的说明

var results []map[string]interface{}
db.Table("MyTable").Where("condition = ?","foo").Find(&results)
// This "pretty" prints it to the console
b, _:= json.MarshalIndent(results, "", "    ")
fmt.Println(string(b))

【讨论】:

  • 我尝试了代码,但它返回空对象。我认为查询没有正确地将数据扫描到[]map[string]interface{} 留下空对象。无论如何,感谢您的帮助!
  • 列类型有哪些?
  • time.Time 列和数字。
  • 我唯一能建议的另一件事是尝试升级 Gorm。您打开数据库连接的方式看起来是旧类型(新的需要配置)并在 gorm v2 gorm.io/docs/v2_release_note.html 中添加了查找映射(这是 git tag v1.2)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多