解决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 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
go语言-在mac下brew升级golang
Apr 25 Golang
Go语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
goland设置颜色和字体的操作
May 05 Golang
Go标准容器之Ring的使用说明
May 05 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
golang语言指针操作
Apr 14 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 Golang
深入理解 Golang 的字符串
May 04 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
消息持续发送的完整例子
2006/10/09 PHP
php curl基本操作详解
2013/07/23 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
python递归函数用法详解
2020/10/26 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
初三学生个人自我评定
2014/04/06 职场文书
质量安全标语
2014/06/07 职场文书
优秀家长自荐材料
2014/08/26 职场文书
个人委托书范本汇总
2014/10/01 职场文书
撤诉申请怎么写
2015/05/19 职场文书
借条格式范本
2015/05/25 职场文书
党小组意见范文
2015/06/08 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书