解决Go gorm踩过的坑


Posted in Golang onApril 30, 2021

使用gorm.Model后无法查询数据

Scan error on column index 1, name “created_at”

提示:

Scan error on column index 1, name “created_at”: unsupported Scan, storing driver.Value type []uint8

解决办法:

打开数据库的时候加上parseTime=true

root:123456@tcp(127.0.0.1:3306)/mapdb?charset=utf8&parseTime=true

补充:golang Gorm 的使用总结

建立结构体时可以通过 TableName来指定要查找的表名

func (CoinLog) TableName() string {
 return "coin_log"
}

通过gorm的映射指定对应表的列

ID            int64              `gorm:"column:id" json:"id"`

通过预加载可以实现各个模型之间的一对多关系,例如下面的代码,其中device结构体对应多个DeviceModular,DeviceModular又有多个CommWeimaqi

通过下面的查询语句可以查询出对应的相关联数据

db.SqlDB.Preload("DeviceModular", "modular_type=1").Preload("DeviceModular.CommWeimaqi").Find(&device)

gorm暂时不支持批量插入

可以通过下面的方式完成批量插入的功能

tx := db.SqlDB.Begin()
  sqlStr := "INSERT INTO report_form (id,create_time,choose_count, device_fall_count,game_order_count,coin_count,member_count," +
   "day_member_count,visit_count,lgz_coin_count,weimaqi_coin_count,store_id,real_coin_count,m_coin_count,coin_spec) VALUES "
  vals := []interface{}{}
  const rowSQL = "(?,?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?)"
  var inserts []string
  for _, elem := range reportForms {
   inserts = append(inserts, rowSQL)
   vals = append(vals, elem.ID, elem.CreateTime, elem.ChooseCount, elem.DeviceFallCount, elem.GameOrderCount, elem.CoinCount, elem.MemberCount, elem.DayMemberCount, elem.VisitCount, elem.LgzCoinCount, elem.WeimaqiCoinCount, elem.StoreId, elem.RealCoinCount, elem.MCoinCount, elem.CoinSpec)
  }
  sqlStr = sqlStr + strings.Join(inserts, ",")
  err := tx.Exec(sqlStr, vals...).Error
  if  err != nil {
   tx.Rollback()
   fmt.Print(err)
  }else {
   tx.Commit()
  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
为什么不建议在go项目中使用init()
Apr 12 Golang
go语言-在mac下brew升级golang
Apr 25 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
Golang: 内建容器的用法
May 05 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 Golang
golang 语言中错误处理机制
Aug 30 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
Go 中的空白标识符下划线
Mar 25 Golang
详解Go语言中Get/Post请求测试
Jun 01 Golang
Golang 如何实现函数的任意类型传参
Apr 29 #Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 #Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 #Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 #Golang
Go使用协程交替打印字符
Apr 29 #Golang
golang goroutine顺序输出方式
Apr 29 #Golang
golang 在windows中设置环境变量的操作
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
Python原始字符串(raw strings)用法实例
2014/10/13 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
Python判断有效的数独算法示例
2019/02/23 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
使用Pycharm分段执行代码
2020/04/15 Python
关于期中考试的反思
2014/02/02 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
家电创业计划书
2019/08/05 职场文书
Python常遇到的错误和异常
2021/11/02 Python