Maison > développement back-end > Golang > le corps du texte

Comment insérer des structures Go avec des champs JSON imbriqués dans des bases de données PostgreSQL à l'aide de sqlx ?

Linda Hamilton
Libérer: 2024-10-26 09:11:02
original
790 Les gens l'ont consulté

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

Insertion d'une structure dans la base de données PostgreSQL

Contexte

Lors de l'utilisation du langage Go avec PostgreSQL comme base de données, le "github.com/lib/pq " Le pilote permet la connectivité à la base de données. Cependant, l'insertion manuelle de données provenant de structures complexes avec des champs JSON imbriqués dans la base de données peut être fastidieuse en raison du grand nombre de champs et de valeurs.

Utiliser des paramètres nommés avec sqlx

Heureusement, le github. La bibliothèque com/jmoiron/sqlx fournit une solution avec sa fonction NamedExec. Cette fonction vous permet de transmettre une structure avec des noms de champs annotés (à l'aide de la balise db) comme paramètre nommé, simplifiant ainsi le processus d'insertion.

Exemple d'implémentation

Considérez la structure suivante :

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

Pour insérer cette structure dans une table de base de données, vous pouvez utiliser le code suivant :

<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>
Copier après la connexion

Cette approche simplifie considérablement le processus d'insertion, éliminant le besoin de spécifier manuellement chaque champ et valeur.

Insertion de tableaux JSON

Bien que la bibliothèque sqlx ne prenne pas directement en charge l'insertion de tableaux JSON, vous pouvez utiliser le type de données jsonb de PostgreSQL pour stocker les données JSON. Pour insérer un tableau JSON dans une colonne jsonb, vous pouvez d'abord le convertir en chaîne, puis utiliser le générateur de requêtes sqlx pour l'insérer.

Par exemple, étant donné la structure suivante avec un champ de tableau JSON :

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

Vous pouvez l'insérer dans une base de données PostgreSQL en utilisant le code suivant :

<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>
Copier après la connexion

Cette approche vous permet d'insérer des structures complexes avec des tableaux JSON dans des bases de données PostgreSQL en utilisant une méthode pratique et efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!