initdb.go 1.3 KB

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