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

Patricia Arquette
リリース: 2024-11-25 21:59:10
オリジナル
757 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート