- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试使用 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"}}] panic: sql: unknown driver "postgres" (forgotten import?)
goroutine 1 [running]: main.main() C:/Users/Willian/Desktop/NEOWAY PROJECT/neoway csv prefixed width importer/main.go:70 +0xbed
Process finished with exit code 2
最佳答案
你导入了sql/database
,一个包含了sql相关操作的通用接口(interface)的包。
由于它只是通用接口(interface),您需要导入接口(interface)的具体实现,在这种情况下,它是数据库驱动程序。
根据您的代码:sql.Open("postgres", psqlInfo)
,我假设您正在使用 postgresql 数据库。有一些postgresql drivers for golang可用,其中之一是https://github.com/lib/pq司机。所以将它添加到导入语句中。
package main
import (
"bufio"
"database/sql"
"encoding/csv"
"encoding/json"
"fmt"
"io"
"log"
"os"
_ "github.com/lib/pq" // <------------ here
)
数据库驱动程序pq
必须在导入语句前加上_
字符导入。这是因为我们没有在代码中显式使用它,同时 database/sql
包仍然需要它。有关详细信息,请参阅此相关的 SO 问题 What does an underscore in front of an import statement mean? .
更多关于golang sql的信息:https://pkg.go.dev/database/sql ..
关于postgresql - 我该如何解决 «panic : sql: unknown driver "postgres" (forgotten import? )»?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52789531/
我将 Sonata Admin 与 SonataUser/FosUser bundle 一起使用。 我想将 FosUser 的“重置密码”功能集成到 Sonata 中。有没有快速的方法: 将“忘记密码
代码: from typing import AsyncIterable import asyncio async def agen() -> AsyncIterable[str]: prin
我不明白为什么函数 fn1 不能编译,即为什么“让 z = &mut x;”以前不能分配不再使用存储在“y”中的引用(“y”被重新分配到别的东西)。 此外,为什么 fn2 和 fn3 在“逻辑上”做同
我想知道其他电子商务/行业网站上“忘记密码”流程的“标准”使用率是多少?目前,没有多少人会访问我网站上的“忘记密码”链接,但这主要是因为大多数人没有密码。我正在安装新的登录名(这将鼓励人们创建密码),
我目前正在审查一个数据库设计,以处理用户记录的删除,以处理 DPA 和 EU GDPR 被遗忘权等要求,建议不在用户之间强制执行参照完整性记录和“相关”表,例如事务、通信事件等,以便在请求时可以删除用
我遇到了这个statement Do not use "forgotten password" functionality. But if you must, ensure that you are
网络网站,我想实现忘记密码。我正在使用以下步骤 表单具有用于输入登录ID和电子邮件ID以及CAPTCHA的输入框 ,当用户输入详细信息并提交时,在验证后在后端生成新密码,并在数据库中替换旧密码。 新的
如果在一个大的继承链中,virtual 会发生什么?某个时候忘记了关键字? 例如: struct I {}; struct A : virtual I {}; struct B : A, virtua
我不知道这是怎么发生的,但是在 SourceTree 中,当我从我的远程(源)SourceTree pull 我的开发分支时,SourceTree 似乎再也不知道“要 pull 的远程分支”是什么了。
我卡了一段时间,不知道哪里错了,请帮助我 这是错误消息: Warning: App(...): No `render` method found on the returned component i
我想使用全局 constexpr 变量: constexpr int foo = 123; 而不是 C 宏: #define FOO (123) 在我写的一些代码中。我想保证相同的行为,因为这不会在运
我正在尝试使用 GO 从 .csv(预固定宽度/表格)将数据插入 POSTGRES。 我做了什么: package main import ( "bufio" "database/sq
已经有几个答案了,但他们似乎告诉我做我已经在做的事情,不要更深入地探讨问题可能是什么。 一点侦察。我试图让我的 Go 应用程序在启动时运行数据库迁移。我有一个在 docker 容器中运行的 Postg
当我尝试以这种方式使用 database/sql 时,它会编译并运行: import ( "database/sql" _ "github.com/go-sql-driver/mysq
刚买了一台新的 Windows 笔记本电脑,在上面安装了 emacs23。 我以前的电脑使用 emacs 22 的时间我不知道有多长。 我有一个较长的 emacs.el,它加载各种侧 elisp 库。
我是一名优秀的程序员,十分优秀!