如何使用golang导入csv并保存在数据库中

时间:2016-08-18 16:05:23

标签: go

这是我的代码第一部分的片段

package main

import (
    "encoding/csv"
    "fmt"
    "os"
)

func main() {

    file, err := os.Open("Account_balances.csv")
    if err != nil {
        fmt.Println("Error", err)
        return
    }
    defer file.Close()

    reader := csv.NewReader(file)
    record, err := reader.ReadAll()
    if err != nil {
        fmt.Println("Error", err)
    }

    for value:= range record{ // for i:=0; i<len(record)
        fmt.Println("", record[value])
    }
}

我想编写使用golang将csv文件保存在任何数据库(即sql,SQLite或postgresql)中的代码。

3 个答案:

答案 0 :(得分:2)

每个数据库引擎都有不同的方式以优化的方式导入CSV。您应该使用它们而不是编写自己的方法来读取CSV和批量插入记录。

参考文献:

MySQL:https://dev.mysql.com/doc/refman/5.7/en/load-data.html

PgSQL:https://www.postgresql.org/docs/current/static/sql-copy.html

答案 1 :(得分:2)

Go MySQL驱动程序支持从文件加载:

请参阅https://github.com/go-sql-driver/mysql#load-data-local-infile-supporthttps://godoc.org/github.com/go-sql-driver/mysql#RegisterLocalFile

  

RegisterLocalFile将给定文件添加到文件白名单中,以便这样做   它可以被&#34; LOAD DATA LOCAL INFILE&#34;使用。另外   您可以允许使用DSN参数的所有本地文件   &#39; allowAllFiles =真&#39;

filePath := "/home/gopher/data.csv" mysql.RegisterLocalFile(filePath)
err := db.Exec("LOAD DATA LOCAL INFILE '" + filePath + "' INTO TABLE
foo") if err != nil { ...

答案 2 :(得分:0)

您可以使用pgfutter之类的工具将csv数据导入PostgreSQL数据库。