Go查询mysql表,并保存数据到txt文件

412 阅读1分钟

需求: 某张大表中有字段存的json数据,需要将数据导出为txt,再根据数据内容进行再加工

这里使用gorm库连接mysql,使用os包的打开文件方法创建文件,写入数据

//引入gorm库和mysql驱动
import (
   "bufio"
   "fmt"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
   "io/ioutil"
   "log"
   "os"
)

//声明结构体和表名
type Public_img struct {
   Img_json string
}
func (Public_img) TableName()  string {
   return "public_img"
}

func main() {
   //要查询的字段名,不区分大小写
   var fd = "img_json"
   file, err := os.OpenFile("table_name" + "_"+ fd + ".txt", os.O_WRONLY|os.O_CREATE, 0666)
   if err != nil {
      log.Panicln("创建文件失败",err)
   }
   defer file.Close()
   writer := bufio.NewWriter(file)

   db := dbSsl()
   //声明切片,查询出来的数据会映射到切片变量中
   var public_img []Public_img
   db.Debug().Distinct(fd).Select(fd).Where(fd + " is not null and " + fd + " <> ''").Find(&public_img)

   //将内容循环迭代出来。
   for _, d := range public_img {
      fmt.Println(d.Img_json)
      writer.WriteString(d.Img_json)
      //换行
      writer.WriteString("\n")
      //另一种写入文件的方式,但没有换行
      //err := ioutil.WriteFile("x1.txt", []byte(d.Pic), 0744)
   }
   //将内存中的内容刷到磁盘
   writer.Flush()
}

//数据连接方法
func dbSsl() *gorm.DB {
   dsn := "username:password@tcp(ip:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
   if err != nil {
      log.Fatalln(err)
   }
   return db
}