Heim >Backend-Entwicklung >Golang >Wann und warum sollte ich „db.Exec()' und vorbereitete Anweisungen in Go verwenden?

Wann und warum sollte ich „db.Exec()' und vorbereitete Anweisungen in Go verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-07 22:37:15966Durchsuche

When and Why Should I Use `db.Exec()` and Prepared Statements in Go?

Warum überhaupt *DB.exec() oder vorbereitete Anweisungen in Golang verwenden?

"Warum überhaupt db.Exec() verwenden"

While Sie können db.Exec und db.Query austauschbar für dieselben SQL-Anweisungen verwenden, sie liefern jedoch unterschiedliche Ergebnisse. db.Exec gibt die Anzahl der betroffenen Zeilen zurück (sofern vom Treiber unterstützt), während db.Query ein Zeilenobjekt zurückgibt.

Um beispielsweise die Anzahl der in einer DELETE-Anweisung gelöschten Zeilen zu zählen:

res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = `, time.Now())
numDeleted, err := res.RowsAffected() // Returns the number of deleted rows

Alternativ (aber weniger effizient):

rows, err := db.Query(`DELETE FROM my_table WHERE expires_at =  RETURNING *`, time.Now())
numDeleted := 0
for rows.Next() { numDeleted++ } // Iterate over deleted rows

db.Exec sollte auch verwendet werden, wenn Sie die Abfrage nicht benötigen Ergebnisse, nur eine Fehlerprüfung:

if _, err := db.Exec(`<my_sql_query>`); err != nil { panic(err) }

"oder vorbereitete Anweisungen in Golang?"

Die Behauptung der Dokumentation, dass Go unter der Decke immer vorbereitete Anweisungen verwendet, ist möglicherweise nicht korrekt. Die Treiberimplementierung scheint zu bestimmen, ob für jeden db.Query-Aufruf eine neue vorbereitete Anweisung erstellt wird.

Der manuelle Aufruf von db.Prepare und das Zwischenspeichern des resultierenden db.Stmt kann jedoch die Leistung für häufig ausgeführte Abfragen verbessern. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation: https://www.postgresql.org/docs/current/static/sql-prepare.html

Das obige ist der detaillierte Inhalt vonWann und warum sollte ich „db.Exec()' und vorbereitete Anweisungen in Go verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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