1.5.7【实战】从数据库中获取数据并导出特定的CSV文件
创建数据库
定义一个与数据库对应的结构体
type User struct { id int name string password string }编写一个名为
queryMultiRow()的查询函数,用于从数据库中获取用户数据// 查询多条数据 func queryMultiRow() ([]User) { rows, err := db.Query("select id, name, password from user") if err != nil { fmt.Printf("query failed err: %v \n", err) return nil } // 关闭rows释放持有的数据库链接 defer rows.Close() // 循环读取结果集中的数据 users := []User{} for rows.Next() { err := rows.Scan(&u.id, %u.name, &u.password) users = append(users, u) if err != nil { fmt.Printf("scan failed, err:%v \n", err) return nil } } return users }编写导出函数,将数据写入指定文件
// 导出csv文件 func ExportCsv(filePath string, data[][]string) { fp, err := os.Create(filePath)// 创建文件句柄 if err != nil{ log.Fatalf("创建文件失败:%v", err) return } defer fp.Close() fp.WriteString("\xEF\xBB\xBF") w := csv.NewWriter(fp) // 创建一个新的写入文件流 w.WriteAll(data) w.Flush() }编写main函数,导出数据
func main() { // 设置导出的文件名 filename := "exportUser.csv" // 从数据库中获取数据 users := queryMultiRow() // 定义一个二维数组 column := [][]string{{"用户id", "用户名", "密码"}} for _, u := range users { str := []string{} str = append(str, strconv.Itoa(u.id)) str = append(str, u.name) str = append(str, u.password) column = append(column, str) } // 导出 ExportCsv(filename, column) }
完整代码:
Last updated