Bagaimana untuk memasukkan struct Go dengan medan JSON bersarang ke dalam pangkalan data PostgreSQL menggunakan sqlx?

Linda Hamilton
Lepaskan: 2024-10-26 09:11:02
asal
790 orang telah melayarinya

How to insert Go structs with nested JSON fields into PostgreSQL databases using sqlx?

Memasukkan Struct dalam Pangkalan Data PostgreSQL

Latar Belakang

Apabila menggunakan Go lang dengan PostgreSQL sebagai pangkalan data, "github.com/lib/pq " pemacu membolehkan sambungan pangkalan data. Walau bagaimanapun, memasukkan data secara manual daripada struct kompleks dengan medan JSON bersarang ke dalam pangkalan data boleh membosankan kerana bilangan medan dan nilai yang banyak.

Menggunakan Parameter Dinamakan dengan sqlx

Nasib baik, github. Perpustakaan com/jmoiron/sqlx menyediakan penyelesaian dengan fungsi NamedExecnya. Fungsi ini membolehkan anda menghantar struct dengan nama medan beranotasi (menggunakan teg db) sebagai parameter bernama, memudahkan proses pemasukan.

Contoh Pelaksanaan

Pertimbangkan struct berikut:

<code class="go">type ApplyLeave1 struct {
    LeaveId           int       `db:"leaveid"`
    EmpId             string    `db:"empid"`
    SupervisorEmpId   string    `db:"supervisorid"`
}</code>
Salin selepas log masuk

Untuk memasukkan struct ini ke dalam jadual pangkalan data, anda boleh menggunakan kod berikut:

<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>
Salin selepas log masuk

Pendekatan ini memudahkan proses pemasukan dengan ketara, menghapuskan keperluan untuk menentukan setiap medan dan nilai secara manual.

Memasukkan Tatasusunan JSON

Walaupun perpustakaan sqlx tidak menyokong pemasukan tatasusunan JSON secara langsung, anda boleh menggunakan jenis data jsonb PostgreSQL untuk menyimpan data JSON. Untuk memasukkan tatasusunan JSON ke dalam lajur jsonb, anda boleh menukarnya terlebih dahulu menjadi rentetan dan kemudian gunakan pembina pertanyaan sqlx untuk memasukkannya.

Sebagai contoh, diberikan struct berikut dengan medan tatasusunan JSON:

<code class="go">type ApplyLeave1 struct {
    LeaveId           int       `db:"leaveid"`
    EmpId             string    `db:"empid"`
    SupervisorEmpId   string    `db:"supervisorid"`
    Certificates     []CertificateInfo `db:"certificates"`
}</code>
Salin selepas log masuk

Anda boleh memasukkannya ke dalam pangkalan data PostgreSQL menggunakan kod berikut:

<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>
Salin selepas log masuk

Pendekatan ini membolehkan anda memasukkan struct kompleks dengan tatasusunan JSON ke dalam pangkalan data PostgreSQL menggunakan kaedah yang mudah dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk memasukkan struct Go dengan medan JSON bersarang ke dalam pangkalan data PostgreSQL menggunakan sqlx?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!