需求: 某张大表中有字段存的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
}