我有一個結構的串列,如下所示
row = [
{
"name":<name1>。
"age" :<age1>,
"job" :<job1>, "job" :<job1>
},
{
"name":<name1>,
"age" :<age1>,
"job" :<job1>, "job" :<job1>
},
{
"name":<name1>,
"age" :<age1>,
"job" :<job1>, "job" :<job1>
},
等等...
]
我想把這個插入到一個SQL表中。到目前為止,我在陣列中運行了一個回圈,并逐一插入了每一行。但是有沒有其他方法可以讓我只用一個查詢就能插入所有的行?我知道批量插入,但我的理解是,為了批量插入,我必須從外部檔案匯入資料。我不想這樣做。我怎樣才能使用這個陣列中的資料并進行批量插入?
uj5u.com熱心網友回復:
type Person struct {
名字 string
年齡 int int
作業 string
}
func InsertPeople(db *sql.DB, personSlice []*Person) error {
var queryString = `INSERT INTO "person_table" (
"姓名"
, "年齡"
, "作業"
) VALUES `
numOfFields :=3
params := make([]interface{}, len(personSlice)*numOfFields)
for i, p := range personSlice {
pos := i * numOfFields
params[pos 0] = p.Name
params[pos 1] = p.Age
params[pos 2] = p.Job
queryString = `(?, ?, ?) ,`
}
queryString = queryString[:len(queryString)-1] // drop last comma ]
_, err := db.Exec(queryString, params...)
return err
}
uj5u.com熱心網友回復:
如果不在服務器上放置一個檔案,你是不可能做任何一種超級優化的批量插入的,我不認為。
我不確定 DB 庫是否支持它,但是使用 SQLX 擴展,您可以使用針對結構的命名 bindvars 來構建一個單一的插入陳述句。 然后您可以將這些結構的陣列傳遞給 NamedExec 等方法。
像這樣:
users := []User{
{
名字。"alex"/span>,
電子郵件。"[email protected]"。
},
{
名字。"muhammed",
電子郵件。"[email protected]",
},
}
db.NamedExec("insert into users (NAME, EMAIL) values (:Name, :Email);" , users)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329383.html
標籤:
上一篇:對多個dockerfiles使用共享dockerfile
下一篇:嘲弄一個結構域的方法
