网站在线客服系统GOFLY代码开发日志-10: gorm执行原生SQL语句
gorm框架操作数据库,一般是使用orm框架所提供的方法函数,是对数据库curd操作sql进行了封装
但是有的时候,封装的方法并不能完全满足我们的需求,我们需要能执行原生sql语句。
原生执行增删改操作
GOFLY在线客服系统里面,可以直接通过程序导入建表语句以及初始数据,这个时候就需要gorm原生执行增加,删除,修改操作,不需要获取每条数据结果
比如我的models包下
var DB *gorm.DB
func NewConnect(mysqlConfigFile string) error {
var mysql = &types.Mysql{
Username: "go_fly_pro",
Password: "go_fly_pro",
Database: "go_fly_pro",
Server: "127.0.0.1",
Port: "3306",
}
isExist, _ := tools.IsFileExist(mysqlConfigFile)
if !isExist {
panic("MYSQL配置文件不存在!" + mysqlConfigFile)
}
info, err := ioutil.ReadFile(mysqlConfigFile)
if err != nil {
panic("MYSQL配置文件读取失败!" + err.Error())
}
err = json.Unmarshal(info, mysql)
if err != nil {
panic("解析MYSQL配置文件JSON结构失败!" + err.Error())
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", mysql.Username, mysql.Password, mysql.Server, mysql.Port, mysql.Database)
DB, err = gorm.Open("mysql", dsn)
if err != nil {
log.Println(err)
panic("数据库连接失败!")
return err
}
DB.SingularTable(true)
DB.LogMode(true)
DB.DB().SetMaxIdleConns(10)
DB.DB().SetMaxOpenConns(100)
DB.DB().SetConnMaxLifetime(59 * time.Second)
return nil
}
func Execute(sql string) error {
db := DB.Exec(sql)
err := db.Error
if err != nil {
log.Println("models.go sql execute error:" + err.Error())
return err
}
return nil
}
这个方法就是执行原生sql增删改
func Execute(sql string) error {
db := DB.Exec(sql)
err := db.Error
if err != nil {
log.Println("models.go sql execute error:" + err.Error())
return err
}
return nil
}
原生执行查询操作
例如我下面这条sql语句,按天查询条数,DB是上面的全局变量,通过.Raw().Scan来执行原生的查询语句
//查询每天条数
type EveryDayNum struct {
Day string `json:"day"`
Num int64 `json:"num"`
}
func CountVisitorsEveryDay(toId string) []EveryDayNum {
var results []EveryDayNum
DB.Raw("select DATE_FORMAT(created_at,'%Y-%m-%d') as day ,"+
"count(*) as num from visitor where to_id=? group by day order by day desc limit 30",
toId).Scan(&results)
return results
}
后面还遇到了哪些问题和知识点将会继续进行总结。
演示网站:
gofly.sopans.com
本作品采用《CC 协议》,转载必须注明作者和本文链接
学习了