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