1.5.7【实战】从数据库中获取数据并导出特定的CSV文件

  1. 创建数据库

  2. 定义一个与数据库对应的结构体

    type User struct {
    	id       int
    	name     string
    	password string
    }
  3. 编写一个名为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
    
    }
  4. 编写导出函数,将数据写入指定文件

    // 导出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()
    }
  5. 编写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