Effizientes Einfügen mehrerer Daten in Go
Das Einfügen mehrerer Datenzeilen in eine Datenbank in einem einzigen Vorgang kann die Effizienz erheblich verbessern. In Go wird dies häufig durch die Verwendung vorbereiteter Anweisungen erreicht. Die Verwendung der Zeichenfolgenverkettung, wie in Ihrer Frage gezeigt, mag zwar praktisch erscheinen, ist jedoch weniger sicher und kann zu SQL-Injection-Schwachstellen führen.
Verwenden vorbereiteter Anweisungen
Zum Einfügen mehrerer Zeilen mit Nachdem Sie vorbereitete Anweisungen erstellt haben, können Sie die folgenden Schritte ausführen:
INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)
stmt, err := db.Prepare(sqlStr) if err != nil { // Handle error }
vals := []interface{}{} for _, dataRow := range data { vals = append(vals, dataRow["v1"], dataRow["v2"], dataRow["v3"]) }
res, err := stmt.Exec(vals...) if err != nil { // Handle error }
Dieser Ansatz stellt sicher, dass die SQL-Anweisung nur einmal geparst wird und die Werte sicher als Parameter eingefügt werden.
Beispiel:
Hier ist ein Beispiel für das Einfügen mehrerer Zeilen in eine „Test“-Tabelle mithilfe vorbereiteter Anweisungen:
import ( "database/sql" "fmt" ) type DataRow struct { v1 string v2 string v3 string } func main() { data := []DataRow{ {v1: "1", v2: "1", v3: "1"}, {v1: "2", v2: "2", v3: "2"}, {v1: "3", v2: "3", v3: "3"}, } db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { // Handle error } sqlStr := "INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)" stmt, err := db.Prepare(sqlStr) if err != nil { // Handle error } vals := []interface{}{} for _, dataRow := range data { vals = append(vals, dataRow.v1, dataRow.v2, dataRow.v3) } res, err := stmt.Exec(vals...) if err != nil { // Handle error } affectedRows, err := res.RowsAffected() if err != nil { // Handle error } fmt.Printf("Inserted %d rows", affectedRows) }
Das obige ist der detaillierte Inhalt vonWie kann ich mit vorbereiteten Anweisungen effizient mehrere Datenzeilen in eine Go-Datenbank einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!