思路
首先我们需要先将目标文件导出成csv格式,然后下载到指定目录,然后执行导入mysql语句将csv文件导入。
本例将展示将云数据导入到mysql的示例,以及导入过程中遇到的坑。
//将云端数据下载到本地
func upload(url string) string {
if url == "" {
return ""
}
//先将读取的文件内容存到本地文件
client := &http.Client{}
Sugar.Info("4")
reqest, err := http.NewRequest("GET", url, nil)
reqest.Header.Add("Content-Type", "application/octet-stream")
if err != nil {
Sugar.Error(err, "返回结果失败")
}
//处理返回结果
resp, err := client.Do(reqest)
if err != nil {
Sugar.Error(err, "处理返回结果")
}
defer resp.Body.Close()
//fmt.Println(resp)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
Sugar.Error(err, "读取失败")
}
err = ioutil.WriteFile("data.csv", body, 0644)
if err != nil {
Sugar.Error(err, "存储失败")
}
return "yes"
}
这时我们已将把数据下栽到了本地,接下来我们需要将数据上传至mysql
local:本地数据
'/usr/local/data.csv':是文件的路径
CHARACTER SET utf8mb4:设置字符集为utf8mb4
fields terminated by ',':字段与字段之间用“,”相隔,
lines terminated by 'n':每行已n作为结束的标志
ignore 1 lines;`:无视第一行数据,因为第一行是字段,而不是具体的数据
特别注意字符集是非常重要的,当你数据中存在一些非utf8的数据时会导入失败,我们需要根据不同情况选择不同字符集
//在上传之前我们需要将所要上传的文件注册一下,否则不能够上传成功
mysql.RegisterLocalFile("/usr/local/data.csv")
//然后我们写sql语句,在此所用的包是"github.com/go-sql-driver/mysql"
sqls0 := `load data local infile '/usr/local/data.csv' into table totalnum CHARACTER SET utf8mb4
fields terminated by ',' optionally enclosed by '"' escaped by '\"' lines terminated by '\n' ignore 1
lines;`
然后我们执行sql语句
smt, err := db.Prepare(sqls0)
if err != nil {
Sugar.Error(err, "创建表预处理失败")
}
_, err = smt.Exec()
if err != nil {
Sugar.Error(err, "表中添加信息失败")
} else {
Sugar.Info("清空表数据")
}
此时我们就可以将我们的云数据导入到我们的mysql表中了