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
Freigeben: 2024-12-07 22:37:15
Original
988 Leute haben es durchsucht

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

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

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

"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!

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