首頁 > 後端開發 > Golang > 主體

如何透過 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
登入後複製

這是因為查詢需要四個值(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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板