golang数据库使用遇到的坑

本文讨论了在使用SQLx进行查询时如何避免因使用`SELECT *`导致的问题,强调了指定字段的重要性。同时,解释了在GORM中遇到的时间类型转换错误,并给出了解决方案,即在数据库连接字符串中添加`parseTime=true`。此外,还介绍了GORM在进行JOIN查询时需要使用`Preload`加载关联数据的方法。
摘要由CSDN通过智能技术生成
1.sqlx查询

业务代码避免使用select * from语句,因为当新增字段而业务代码未更新时会报错。

fields := m.TraversalsByName(base, columns)
		// if we are not unsafe and are missing fields, return an error
		if f, err := missingFields(fields); err != nil && !isUnsafe(rows) {
			return fmt.Errorf("missing destination name %s in %T", columns[f], dest)
		}

由于上面这段代码,字段缺失错误。

2.gorm

当出现类似错误时:

Scan error on column index 4: unsupported Scan, storing driver.Value type []uint8 into type *time.Time

需要将mysql链接字符串加上

parseTime=true

另外需要joins查询的时候,需要先加上preload才能一把查出子属性,如下:

errs := db.Preload("Role").
    Joins("JOIN roles ON roles.id = users.roleid"). 
    Where("users.id = ?", userId). 
    First(&user).GetErrors()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值