如何解决«恐慌:sql:未知驱动程序“postgres”(忘记导入?)»?

我正在尝试使用GO将数据从.csv(预固定宽度/表格格式)插入POSTGRES

我所做的:

主程序包
进口(
“布菲奥”
“数据库/sql”
“编码/csv”
“编码/json”
“fmt”
“io”
“日志”
“操作系统”
)
类型Consumidor结构{
CPF字符串`json:“CPF”`
Private字符串`json:“Private”`
不完整字符串`json:“不完整”`
Compras*Compras`json:“Compras,省略空”`
}
类型Compras结构{
DataUltimacompra字符串`json:“DataUltimacompra”`
TicketMedio字符串`json:“TicketMedio”`
TicketUltimaCompra字符串`json:“TicketUltimaCompra”`
LojamaisFrequent字符串`json:“LojamaisFrequent”`
LojaUltimaCompra字符串`json:“LojaUltimaCompra”`
}
常数(
host=“localhost”
端口=5432
user=“postgres”
password=“”
dbname=“neoway”
)
func main(){
csvFile,u:=os.Open(“data.csv”)
读卡器:=csv.NewReader(bufio.NewReader(csvFile))
var DADOSISERT[]消费者
为了{
行,错误:=reader.Read()
如果错误==io.EOF{
打破
}否则,如果错误!=nil{
log.Fatal(错误)
}
DADOSISERT=附加(DADOSISERT,Consumidor{
CPF:第[0]行,
私有:第[1]行,
不完整:第[2]行,
Compras:&Compras{
DataUltimacompra:第[3]行,
TicketMedio:line[4],
Timacompra:第[5]行,
LojamasFrequent:第[6]行,
LojaUltimaCompra:第[7]行,
},
})
}
peopleJson,:=json.Marshal(dadosinsert)
fmt.Println(字符串(peopleJson))
psqlInfo:=fmt.Sprintf(“主机=%s端口=%d用户=%s”+
“密码=%s dbname=%s sslmode=disable”,
主机、端口、用户、密码、数据库名)
db,err:=sql.Open(“postgres”,psqlInfo)
如果错误!=零{
恐慌(错误)
}
延迟db.Close()
sqlStatement:=`
在基本测试中插入(CPF,“专用”、“不完整”、“数据数据数据”、“票证”、“票证”、“票证数据”、“票证数据”、“LOJA MAIS FrequeuÊNTE”、“LOJA DAÚLTIMA COMPRA”)
)
价值($1、$2、$3、$4、$5、$6、7$、8$)
返回id`
id:=0
err=db.QueryRow(sqlStatement,30,“a”、“b”、“c”).Scan(&id)
如果错误!=零{
恐慌(错误)
}
fmt.Println(“新记录ID为:”,ID)
}

当我运行时,我得到这个错误

[{“CPF”:“xxxxx”,“Private”:“TRUE”,“Incompleto”:“FALSE”,“Compras”:{“DataUltimacompra”:“12/10/2018”,“TicketMedio”:“200”,“TicketUltimaCompra”:“250”,“LojamaisFrequent”:“111.111-99”,“LojaUltimaCompra”:“111.111-88”}]
恐慌:sql:未知驱动程序“postgres”(忘记导入?)

goroutine1[running]:main.main()C:/Users/Willian/Desktop/NEOWAY
项目/neoway csv前缀宽度导入器/main.go:70+0xbed

进程已完成,退出代码为2

answer=“52791919”的数据

您导入了sql/database,一个包包含用于sql相关操作的通用接口

由于它只是一个通用接口,因此需要导入接口的具体实现,在这种情况下,它就是数据库驱动程序

从您的代码:sql.Open("postgres",psqlInfo),我假定您正在使用postgresql数据库。golang有一些postgresql驱动程序可用,其中之一是https://github.com/lib/pq 驾驶员因此,将其添加到import语句中

主程序包
进口(
&“bufio”;
&“数据库/sql”;
&“编码/csv”;
&“编码/json”;
&“fmt”;
&“io”;
&“日志”;
&“操作系统”;
_“github.com/lib/pq”/“lt;”在这里
)

数据库驱动程序pq导入时必须在导入语句前面加上字符。这是因为我们没有在代码中显式使用它,而数据库/sql包仍然需要它。有关更多详细信息,请参见此相关问题,导入语句前面的下划线是什么意思

有关golang sql的更多信息:https://pkg.go.dev/database/sql.

发表评论