Heim  >  Artikel  >  Backend-Entwicklung  >  Wie füge ich Go-Strukturen mit verschachtelten JSON-Feldern mithilfe von SQLX in PostgreSQL-Datenbanken ein?

Wie füge ich Go-Strukturen mit verschachtelten JSON-Feldern mithilfe von SQLX in PostgreSQL-Datenbanken ein?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 09:11:02773Durchsuche

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

Einfügen einer Struktur in die PostgreSQL-Datenbank

Hintergrund

Bei Verwendung von Go lang mit PostgreSQL als Datenbank wird die Datei „github.com/lib/pq „Treiber ermöglicht Datenbankkonnektivität. Das manuelle Einfügen von Daten aus komplexen Strukturen mit verschachtelten JSON-Feldern in die Datenbank kann jedoch aufgrund der großen Anzahl von Feldern und Werten mühsam sein.

Verwendung benannter Parameter mit sqlx

Zum Glück der Github. Die Bibliothek com/jmoiron/sqlx bietet mit ihrer NamedExec-Funktion eine Lösung. Mit dieser Funktion können Sie eine Struktur mit annotierten Feldnamen (unter Verwendung des db-Tags) als benannten Parameter übergeben und so den Einfügevorgang vereinfachen.

Beispielimplementierung

Betrachten Sie die folgende Struktur:

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

Um diese Struktur in eine Datenbanktabelle einzufügen, können Sie den folgenden Code verwenden:

<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>

Dieser Ansatz vereinfacht den Einfügevorgang erheblich und macht die manuelle Angabe jedes Felds und Werts überflüssig.

JSON-Arrays einfügen

Während die SQLX-Bibliothek das Einfügen von JSON-Arrays nicht direkt unterstützt, können Sie den jsonb-Datentyp von PostgreSQL zum Speichern von JSON-Daten verwenden. Um ein JSON-Array in eine JSONB-Spalte einzufügen, können Sie es zunächst in eine Zeichenfolge konvertieren und es dann mit dem SQLX-Abfrage-Builder einfügen.

Gegeben sei beispielsweise die folgende Struktur mit einem JSON-Array-Feld:

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

Sie können es mit dem folgenden Code in eine PostgreSQL-Datenbank einfügen:

<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>

Mit diesem Ansatz können Sie komplexe Strukturen mit JSON-Arrays auf bequeme und effiziente Weise in PostgreSQL-Datenbanken einfügen.

Das obige ist der detaillierte Inhalt vonWie füge ich Go-Strukturen mit verschachtelten JSON-Feldern mithilfe von SQLX in PostgreSQL-Datenbanken ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn