ホームページ >バックエンド開発 >Golang >sqlx を使用して、ネストされた JSON フィールドを持つ Go 構造体を PostgreSQL データベースに挿入するにはどうすればよいですか?

sqlx を使用して、ネストされた JSON フィールドを持つ Go 構造体を PostgreSQL データベースに挿入するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 09:11:02905ブラウズ

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

PostgreSQL データベースへの構造体の挿入

背景

データベースとして PostgreSQL を使用して Go lang を利用する場合、「github.com/lib/pq」 " ドライバーによりデータベース接続が有効になります。ただし、ネストされた JSON フィールドを含む複雑な構造体からデータベースにデータを手動で挿入するのは、フィールドと値の数が膨大であるため、面倒な場合があります。

sqlx での名前付きパラメーターの使用

幸いなことに、github. 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>

このアプローチにより、挿入プロセスが大幅に簡素化され、各フィールドと値を手動で指定する必要がなくなりました。

JSON 配列の挿入

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。