ホームページ  >  記事  >  バックエンド開発  >  GORM の `tx.Exec()` による一括挿入に配列インターフェイスを正しく使用するにはどうすればよいですか?

GORM の `tx.Exec()` による一括挿入に配列インターフェイスを正しく使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 21:59:10759ブラウズ

How Can I Correctly Use Array Interfaces for Bulk Inserts with GORM's `tx.Exec()`?

GORM 一括挿入に配列インターフェイスを使用する

データベースに複数のレコードを挿入するには、多くの場合、複雑な SQL クエリの構築が必要になります。 GORM はこのプロセスを簡素化しますが、配列インターフェイスを使用して複数の値を正しく渡す方法を理解することが重要です。

次のコードを考えてみましょう:

vals := append(vals, "XX1", "Jakarta")
vals = append(vals, "XX2", "Bandung")

tx.Exec(sqlStr, vals)

このコードでは、次のエラーが発生します。

Error 1136: Column count doesn't match value count at row 1

これは、クエリでは 4 つの値 (コード、名前、コード、名前) が必要ですが、配列インターフェイスの値がは、個々の要素ではなく単一の引数として渡されます。

これを修正するには、「...」演算子を使用して配列インターフェイスを「解凍」し、各要素を個別に渡す必要があります。

tx.Exec(sqlStr, vals...)

tx.Exec() の署名は次のとおりです:

func (tx *Tx) Exec(query string, args ...interface{}) (Result, error)

したがって、vals を vals として渡す必要があります。これが修正されたものです。 code:

res, err := tx.Exec(sqlStr, vals...)

これで、クエリが正しく実行され、目的の SQL ステートメントが生成されます:

INSERT INTO city(code, name) VALUES ('XX1', 'Jakarta'),('XX2', 'Bandung')

クエリの実行後に返されたエラー (err) を必ず確認してください。

以上がGORM の `tx.Exec()` による一括挿入に配列インターフェイスを正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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