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

Linda Hamilton
Freigeben: 2024-10-26 09:11:02
Original
790 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!