execSql.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package database
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "strings"
  7. "gorm.io/gorm"
  8. )
  9. func ExecSql(db *gorm.DB, filePath string) error {
  10. sql, err := IoUtil(filePath)
  11. if err != nil {
  12. fmt.Println("数据库基础数据初始化脚本读取失败!原因:", err.Error())
  13. return err
  14. }
  15. sqlList := strings.Split(sql, ";")
  16. for i := 0; i < len(sqlList)-1; i++ {
  17. if strings.Contains(sqlList[i], "--") {
  18. fmt.Println(sqlList[i])
  19. continue
  20. }
  21. sql := strings.Replace(sqlList[i]+";", "\n", "", -1)
  22. sql = strings.TrimSpace(sql)
  23. if err = db.Exec(sql).Error; err != nil {
  24. log.Printf("error sql: %s", sql)
  25. if !strings.Contains(err.Error(), "Query was empty") {
  26. return err
  27. }
  28. }
  29. }
  30. return nil
  31. }
  32. func IoUtil(filePath string) (string, error) {
  33. if contents, err := ioutil.ReadFile(filePath); err == nil {
  34. //因为contents是[]byte类型,直接转换成string类型后会多一行空格,需要使用strings.Replace替换换行符
  35. result := strings.Replace(string(contents), "\n", "", 1)
  36. fmt.Println("Use ioutil.ReadFile to read a file:", result)
  37. return result, nil
  38. } else {
  39. return "", err
  40. }
  41. }