使用go连接数据库并导出文件
2021-11-28 本文已影响0人
barriers
本文为将postresql中的数据导出为csv文件,并解决其中遇到的一些bug。
当运行程序报如下错误时
no required module provides package github.com/go-xorm/xorm: go.mod file not found in current directory or any parent directory; see 'go help modules'
是因为缺少包管理工具的原因
运行如下命令
#proname为包管理的名字,自定义,该句表示初始化一个包管理文件(相当于requirements.txt)
go mod init proname
此外运行程序还需要装一些包
go mod init proname
go get -u github.com/go-gota/gota/dataframe
go get -u github.com/go-gota/gota/series
go get github.com/lib/pq
go get github.com/go-xorm/xorm
pq为postgresql的连接数据库的驱动,xorm使用pq进行连接数据库;
gota为数据处理包,类似于pandas,gonum为数据计算的包,类似于numpy
关于gota的使用详情见https://github.com/go-gota/gota;
xorm为go中的连接数据库的工具,并使用orm形式进行操作数据库,类似于sqlalchemy,关于xorm的使用,详情见https://blog.csdn.net/skh2015java/article/details/78814595;https://blog.csdn.net/feiwutudou/article/details/81317558;https://www.jianshu.com/p/0bfd12157563等
package main
import (
"fmt"
"os"
_"github.com/lib/pq"
"github.com/go-xorm/xorm"
"github.com/go-gota/gota/dataframe"
"log"
)
var config map[string] string = map[string] string {"user": "local", "pwd": "qda123", "host": "127.0.0.1", "port": "5432", "db": "test"}
type Goods struct {
Id int
Name string
Price int
Year int
Category string
Description string
}
func createEngine() *xorm.Engine {
configUrl := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
config["host"], config["port"], config["user"], config["pwd"], config["db"])
engine, err := xorm.NewEngine("postgres", configUrl)
if err != nil {
log.Fatal("数据库链接失败", err)
return nil
}
engine.ShowSQL()
err = engine.Ping()
if err != nil {
log.Fatal(err)
return nil
}
fmt.Println("数据库成功连接")
return engine
}
func queryDb(engine *xorm.Engine) []Goods {
var goods []Goods
engine.SQL("select id,name,price,year,category,description from goods;").Find(&goods)
return goods
}
func main(){
engine := createEngine()
goods := queryDb(engine)
good := dataframe.LoadStructs(goods)
fp, err := os.Create("./商品.csv")
if err != nil {
fmt.Println("文件打开错误")
}
defer fp.Close()
fmt.Println(good)
fmt.Println(goods[0].Id)
//解决导出csv乱码问题,在文件开头写入UTF-8 BOM
fp.WriteString("\xEF\xBB\xBF")
good.WriteCSV(fp)
//cmd中执行GOOS=windows
//go build -o query.exe db/query.go
}