首页 >后端开发 >Golang >如何使用 Go、GORM 和 pgx 库无循环地将 CSV 数据批量插入 PostgreSQL?

如何使用 Go、GORM 和 pgx 库无循环地将 CSV 数据批量插入 PostgreSQL?

Susan Sarandon
Susan Sarandon原创
2024-10-27 00:02:30305浏览

How to Bulk Insert CSV Data into PostgreSQL Using Go, GORM, and the pgx Library Without Loops?

使用 Go 和 GORM 在不使用 For 循环的情况下将 CSV 数据插入 PostgreSQL

在这种情况下,您有一个 CSV 文件,其中包含要批量插入到 PostgreSQL 表中的数据使用 Go 和 GORM ORM,而不使用 for 循环或 SQL 原始查询。

可以利用 pgx 库来完成此任务,如以下代码片段所示:

<code class="go">package main

import (
    "context"
    "database/sql"
    "fmt"
    "os"

    "github.com/jackc/pgx/v4/pgxpool"
)

func main() {
    filename := "foo.csv"
    dbconn, err := pgxpool.Connect(context.Background(), os.Getenv("DATABASE_URL"))
    if err != nil {
        panic(err)
    }
    defer dbconn.Close()

    f, err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    defer func() { _ = f.Close() }()

    res, err := dbconn.Conn().PgConn().CopyFrom(context.Background(), f, "COPY csv_test FROM STDIN (FORMAT csv)")
    if err != nil {
        panic(err)
    }

    fmt.Print(res.RowsAffected())
}</code>

In此代码:

  1. 导入 pgx/v4 和 pgxpool 库,以使用 DATABASE_URL 环境变量建立到 PostgreSQL 数据库的连接池。
  2. CSV 文件(“foo.csv”) ") 打开进行读取。
  3. CopyFrom 方法用于将 CSV 数据复制到 csv_test 表中。 (FORMAT csv) 参数指定数据格式。
  4. 最后,受复制操作影响的行数被打印到控制台。

以上是如何使用 Go、GORM 和 pgx 库无循环地将 CSV 数据批量插入 PostgreSQL?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn