当初始化项目的时候,之前需要手动导入数据库sql文件,现在可以直接在命令行参数里输入go-fly install ,就可以把数据库文件导进去了
实现方式就是使用gorm执行sql文件里面的每行sql语句
读入sql文件后把字符串按照分号分隔,转成[]string ,然后再循环执行
实例代码是(自行更改文件目录):
func install(){
sqlFile:=config.Dir+"go-fly.sql"
isExit,_:=tools.IsFileExist(config.MysqlConf)
dataExit,_:=tools.IsFileExist(sqlFile)
if !isExit||!dataExit{
fmt.Println("config/mysql.json 数据库配置文件或者数据库文件go-fly.sql不存在")
os.Exit(1)
}
sqls,_:=ioutil.ReadFile(sqlFile)
sqlArr:=strings.Split(string(sqls),";")
for _,sql:=range sqlArr{
if sql==""{
continue
}
models.Execute(sql)
}
}
go-fly代码中数据库操作类
package models
import (
"fmt"
"github.com/jinzhu/gorm"
"github.com/taoshihan1991/imaptool/config"
"time"
)
var DB *gorm.DB
type Model struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt *time.Time `sql:"index" json:"deleted_at"`
}
func init(){
mysql:=config.CreateMysql()
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", mysql.Username, mysql.Password, mysql.Server, mysql.Port, mysql.Database)
DB,_=gorm.Open("mysql",dsn)
DB.SingularTable(true)
DB.LogMode(true)
DB.DB().SetMaxIdleConns(10)
DB.DB().SetMaxOpenConns(100)
}
func Execute(sql string){
DB.Exec(sql)
}
func CloseDB() {
defer DB.Close()
}
简化的逻辑就是gorm open以后得到的实例执行一下Exec方法,执行sql语句
执行完成以后的效果: