利用gorm
gorm执行原生sql,如果是查询的话,用Raw(),否则用Exec()。
插入数据:
初始化一个指向gorm.DB实例的指针后,调用此指针的Exec()方法
// Exec execute raw sql func (db *DB) Exec(sql string, values ...interface{}) (tx *DB) { tx = db.getInstance() tx.Statement.SQL = strings.Builder{} if strings.Contains(sql, "@") { clause.NamedExpr{SQL: sql, Vars: values}.Build(tx.Statement) } else { clause.Expr{SQL: sql, Vars: values}.Build(tx.Statement) } tx.callbacks.Raw().Execute(tx) return }
id := 1
name := "张三"
age := 18
city := ""
数据库中,city字段值不想存空字符串,想存null,如何搞?可以利用go自带的sql包中的NullString类型。
自定义一个函数,用于根据string生成NullString。实际上,go本应该自带这个方法的,无奈go基础包并不完善。
func NewNullString(s string) sql.NullString { if len(s) == 0 { return sql.NullString{} } return sql.NullString{ String: s, Valid: true, } }
然后Exec方法中,
db.Exec("insert into t_a (id, name, age, city) values (?, ?, ?, ?)", id, name, age, NewNullString(city))
详细代码是:
if err := dao.DB.Exec("insert into t_a (id, name, age, city) values (?, ?, ?, ?)", id, name, age, NewNullString(city)).Error; err != nil { log.Logger.Panic("插入t_a失败", err) }
利用原生的database/sql包和利用gorm同理,略。