GOで.csv(事前に固定された幅/表形式)からPOSTGRESにデータを挿入しようとしています。
私がやったこと:
package main
import (
"bufio"
"database/sql"
"encoding/csv"
"encoding/json"
"fmt"
"io"
"log"
"os"
)
type Consumidor struct {
CPF string `json:"CPF"`
Private string `json:"Private"`
Incompleto string `json:"Incompleto"`
Compras *Compras `json:"Compras,omitempty"`
}
type Compras struct {
DataUltimacompra string `json:"DataUltimacompra"`
TicketMedio string `json:"TicketMedio"`
TicketUltimaCompra string `json:"TicketUltimaCompra"`
LojaMaisFrequente string `json:"LojaMaisFrequente"`
LojaUltimaCompra string `json:"LojaUltimaCompra"`
}
const (
Host = "localhost"
port = 5432
user = "postgres"
password = ""
dbname = "neoway"
)
func main() {
csvFile, _ := os.Open("data.csv")
reader := csv.NewReader(bufio.NewReader(csvFile))
var dadosinsert []Consumidor
for {
line, error := reader.Read()
if error == io.EOF {
break
} else if error != nil {
log.Fatal(error)
}
dadosinsert = append(dadosinsert, Consumidor{
CPF: line[0],
Private: line[1],
Incompleto: line[2],
Compras: &Compras{
DataUltimacompra: line[3],
TicketMedio: line[4],
TicketUltimaCompra: line[5],
LojaMaisFrequente: line[6],
LojaUltimaCompra: line[7],
},
})
}
peopleJson, _ := json.Marshal(dadosinsert)
fmt.Println(string(peopleJson))
psqlInfo := fmt.Sprintf("Host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
Host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
sqlStatement := `
INSERT INTO base_teste (CPF,"PRIVATE","INCOMPLETO","DATA DA ÚLTIMA COMPRA","TICKET MÉDIO","TICKET DA ÚLTIMA COMPRA","LOJA MAIS FREQUÊNTE","LOJA DA ÚLTIMA COMPRA")
)
VALUES ($1, $2, $3, $4, $5, $6, 7$, 8$)
RETURNING id`
id := 0
err = db.QueryRow(sqlStatement, 30, "a", "b", "c").Scan(&id)
if err != nil {
panic(err)
}
fmt.Println("New record ID is:", id)
}
実行すると、このエラーが発生します
[{"CPF": "xxxxx"、 "Private": "TRUE"、 "Incompleto": "FALSE"、 "Compras":{"DataUltimacompra": "12/10/2018"、 "TicketMedio": "200" 、 "TicketUltimaCompra": "250"、 "LojaMaisFrequente": "111.111.111-99"、 "LojaUltimaCompra": "111.111.111-88"}}]パニック:sql:不明なドライバー "postgres"(インポートを忘れましたか?)
goroutine 1 [running]:main.main()C:/ Users/Willian/Desktop/NEOWAY PROJECT/neoway csv prefixed width importer/main.go:70 + 0xbed
プロセスは終了コード2で終了しました
_sql/database
_をインポートしました。パッケージには、SQL関連の操作の汎用インターフェイスが含まれています。
それは汎用インターフェースだけなので、インターフェースの具体的な実装をインポートする必要があります。このコンテキストでは、データベースドライバーです。
あなたのコードから:sql.Open("postgres", psqlInfo)
、私はあなたがpostgresqlデータベースを使用していると思います。 golang用のpostgresqlドライバー がいくつかありますが、そのうちの1つは https://github.com/lib/pq ドライバーです。したがって、それをimportステートメントに追加します。
_package main
import (
"bufio"
"database/sql"
"encoding/csv"
"encoding/json"
"fmt"
"io"
"log"
"os"
_ "github.com/lib/pq" // here
)
_
パッケージと直接対話しないため、__
_文字でインポートされたデータベースドライバー。関連SOトピック インポートステートメントの前にある下線はどういう意味ですか? 。
Golang sqlの詳細: https://godoc.org/database/sql 。 。