首頁 >後端開發 >Golang >如何透過 GORM 的 `tx.Exec()` 正確使用陣列介面進行批次插入?

如何透過 GORM 的 `tx.Exec()` 正確使用陣列介面進行批次插入?

Patricia Arquette
Patricia Arquette原創
2024-11-25 21:59:10861瀏覽

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

這是因為查詢需要四個值(code、name、code、 name),但是數組介面vals 是作為單一參數而不是單一元素傳遞。

要解決此問題,我們需要使用「...」運算子來「解包」數組介面並單獨傳遞每個元素:

tx.Exec(sqlStr, vals...)

tx.Exec() 的簽名是:

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

所以,我們需要將vals 作為vals傳遞......下面是更正後的程式碼:

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

現在,查詢將被正確執行,產生所需的SQL 語句:

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

執行後記得檢查傳回的錯誤(err)查詢。

以上是如何透過 GORM 的 `tx.Exec()` 正確使用陣列介面進行批次插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn