当使用 Go lang 和 PostgreSQL 作为数据库时,“github.com/lib/pq” " 驱动程序启用数据库连接。然而,由于字段和值数量庞大,手动将具有嵌套 JSON 字段的复杂结构中的数据插入数据库可能会很乏味。
幸运的是,github.com 上有大量的字段和值。 com/jmoiron/sqlx 库通过其 NamedExec 函数提供了一个解决方案。此函数允许您将带注释的字段名称(使用 db 标签)的结构作为命名参数传递,从而简化插入过程。
考虑以下结构:
<code class="go">type ApplyLeave1 struct { LeaveId int `db:"leaveid"` EmpId string `db:"empid"` SupervisorEmpId string `db:"supervisorid"` }</code>
要将此结构插入数据库表中,可以使用以下代码:
<code class="go">import ( _ "github.com/lib/pq" "github.com/jmoiron/sqlx" "log" ) // Define the database connection. db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable") if err != nil { log.Fatalln(err) } // Prepare the SQL query with named parameters. query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid) VALUES(:leaveid, :empid, :supervisorid)` // Create an instance of the struct to be inserted. var leave1 ApplyLeave1 // Execute the query with the named parameters. _, err = db.NamedExec(query, leave1) if err != nil { log.Fatalln(err) }</code>
这种方法显着简化了插入过程,无需手动指定每个字段和值。
虽然 sqlx 库不直接支持 JSON 数组插入,但您可以使用 PostgreSQL 的 jsonb 数据类型来存储 JSON 数据。要将 JSON 数组插入 jsonb 列,您可以首先将其转换为字符串,然后使用 sqlx 查询生成器插入它。
例如,给定以下带有 JSON 数组字段的结构:
<code class="go">type ApplyLeave1 struct { LeaveId int `db:"leaveid"` EmpId string `db:"empid"` SupervisorEmpId string `db:"supervisorid"` Certificates []CertificateInfo `db:"certificates"` }</code>
您可以使用以下代码将其插入到 PostgreSQL 数据库中:
<code class="go">// Convert the JSON array to a string. certificatesJSON, err := json.Marshal(leave1.Certificates) if err != nil { log.Fatalln(err) } // Prepare the SQL query with named parameters. query := `INSERT INTO TABLENAME(leaveid, empid, supervisorid, certificates) VALUES(:leaveid, :empid, :supervisorid, :certificates)` // Create an instance of the struct to be inserted. var leave1 ApplyLeave1 // Execute the query with the named parameters. _, err = db.NamedExec(query, map[string]interface{}{ "leaveid": leave1.LeaveId, "empid": leave1.EmpId, "supervisorid": leave1.SupervisorEmpId, "certificates": string(certificatesJSON), }) if err != nil { log.Fatalln(err) }</code>
这种方法允许您使用方便高效的方法将带有 JSON 数组的复杂结构插入到 PostgreSQL 数据库中。
以上是如何使用 sqlx 将带有嵌套 JSON 字段的 Go 结构插入到 PostgreSQL 数据库中?的详细内容。更多信息请关注PHP中文网其他相关文章!