需求场景:主要是用在如果本地有比较庞大的数据表,导致excel不能正常使用的时候,或者是要做批量的数据迁移的场景,可以通用
1、需要用到的函数库
sql用于数据库操作,mysql驱动程序,日志信息,还有表格函数包。
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
"github.com/xuri/excelize/v2"
)
2、数据库连接和预编译sql语句conn.Prepare和sql.Open函数
conn, err := sql.Open("mysql", "用户名:密码@tcp(机器IP:端口)/mysql?charset=utf8")
defer conn.Close()
res, err := conn.Exec("create table if not exists 表名(列1INT UNSIGNED AUTO_INCREMENT,列2 VARCHAR(100),列3 VARCHAR(50),列4 VARCHAR(200),列4 VARCHAR(300),列5 VARCHAR(80),PRIMARY KEY(列5 ,列5 ),unique key(列5 ,列5 ,列5 ))DEFAULT CHARSET=utf8")
if err != nil {
fmt.Println(err)
}
log.Println(res, err)
sql, err := conn.Prepare("insert into serviceId(列1 ,列2 ,列3 ,列4 列5 ) values (?,?,?,?,?)")
log.Println(sql, err)
defer sql.Close()
3、读取表格操作,并且执行 sql.Exec 将数据导入数据库中
// mysqldate
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
"github.com/xuri/excelize/v2"
)
func main() {
conn, err := sql.Open("xxxxx", "xxxxx")
defer conn.Close()
res, err := conn.Exec("xxxxx")
if err != nil {
fmt.Println(err)
}
log.Println(res, err)
sql, err := conn.Prepare("xxxxx")
log.Println(sql, err)
defer sql.Close()
f, err := excelize.OpenFile("xxxxx.xlsx")
if err != nil {
fmt.Println(err)
return
}
rows, err := f.GetRows("xxxxx")
//fmt.Println(len(rows[0]))
// fmt.Println(len(cell)
count := 0
for _, row := range rows[1:] {
res, err := sql.Exec(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10]) //string格式
if err != nil {
log.Println(res, err)
} else {
count += 1
log.Println("success")
}
}
fmt.Println(count)
fmt.Printf("%T", rows[4]) //string[]格式
}
参考的函数库操作地址:
Go 语言编写的用于操作 Office Excel 文档基础库:Excelize
Go语言执行SQL的简单操作:Go database/sql 指南
总结:代码思想比较简答,就是直接连接数据库,然后通过读取表格的内容,再把表格内容存到数据库里面。推荐大家在初学的时候多看官方的函数库介绍和指导,不然是不够全面的。下一篇介绍数据库查询接口的编写