Heim > Backend-Entwicklung > Golang > Wie kann ich mit vorbereiteten Anweisungen effizient mehrere Datenzeilen in eine Go-Datenbank einfügen?

Wie kann ich mit vorbereiteten Anweisungen effizient mehrere Datenzeilen in eine Go-Datenbank einfügen?

Mary-Kate Olsen
Freigeben: 2024-12-23 01:36:26
Original
824 Leute haben es durchsucht

How Can I Efficiently Insert Multiple Rows of Data into a Go Database Using Prepared Statements?

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:

  1. Erstellen Sie eine Vorlage für eine SQL-Anweisung mit Platzhaltern für die Daten Werte:
INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)
Nach dem Login kopieren
  1. Bereiten Sie die Anweisung mit der db.Prepare-Methode vor:
stmt, err := db.Prepare(sqlStr)
if err != nil {
    // Handle error
}
Nach dem Login kopieren
  1. Erstellen Sie für jede Zeile ein Wertesegment :
vals := []interface{}{}

for _, dataRow := range data {
    vals = append(vals, dataRow["v1"], dataRow["v2"], dataRow["v3"])
}
Nach dem Login kopieren
  1. Führen Sie die Anweisung mit aus Werte:
res, err := stmt.Exec(vals...)
if err != nil {
    // Handle error
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage