go导出mysql_使用go脚本从mysql中导出数据到CSV中

请看代码,

package main

// 从Mysql中导出数据到CSV文件。

import (

"database/sql"

"encoding/csv"

"fmt"

"os"

_ "github.com/go-sql-driver/mysql"

)

var (

tables = []string{"squareNum", "user"}

count = len(tables)

ch = make(chan bool, count)

)

func main() {

db, err := sql.Open("mysql", "root:123.com@tcp(192.168.8.211:3306)/test?charset=utf8")

// defer db.Close()

if err != nil {

panic(err.Error())

}

for _, table := range tables {

go querySQL(db, table, ch)

}

for i := 0; i < count; i++ {

}

fmt.Println("Done!")

}

func querySQL(db *sql.DB, table string, ch chan bool) {

fmt.Println("开始处理:", table)

rows, _ := db.Query(fmt.Sprintf("SELECT * from %s", table))

columns, err := rows.Columns()

if err != nil {

panic(err.Error())

}

//values:一行的所有值,长度==列数

values := make([]sql.RawBytes, len(columns))

// print(len(values))

scanArgs := make([]interface{}, len(values))

for i := range values {

scanArgs[i] = &values[i]

}

totalValues := [][]string{}

for rows.Next() {

var s []string

err = rows.Scan(scanArgs...) //把每行的内容添加到scanArgs,也添加到了values

if err != nil {

panic(err.Error())

}

for _, v := range values {

s = append(s, string(v))

// print(len(s))

}

totalValues = append(totalValues, s)

}

if err = rows.Err(); err != nil {

panic(err.Error())

}

writeToCSV(table+".csv", columns, totalValues)

ch

}

func writeToCSV(file string, columns []string, totalValues [][]string) {

// fmt.Println(columns)

f, err := os.Create(file)

if err != nil {

panic(err)

}

f.WriteString("\xEF\xBB\xBF")

defer f.Close()

w := csv.NewWriter(f)

for a, i := range totalValues {

if a == 0 {

w.Write(columns)

w.Write(i)

} else {

// fmt.Println(i)

w.Write(i)

}

}

w.Flush()

fmt.Println("处理完毕:", file)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值