[Go]GO語言實戰-GO-FLY在線客服gorm導入sql文件

當初始化項目的時候,以前須要手動導入數據庫sql文件,如今能夠直接在命令行參數裏輸入go-fly install ,就能夠把數據庫文件導進去了html

實現方式就是使用gorm執行sql文件裏面的每行sql語句mysql

讀入sql文件後把字符串按照分號分隔,轉成[]string ,而後再循環執行git

實例代碼是(自行更改文件目錄):github

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代碼中數據庫操做類sql

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語句數據庫

 

執行完成之後的效果:json

相關文章
相關標籤/搜索