首頁 > 後端開發 > Golang > 我何時以及為什麼應該在 Go 中使用 `db.Exec()` 和準備好的語句?

我何時以及為什麼應該在 Go 中使用 `db.Exec()` 和準備好的語句?

Mary-Kate Olsen
發布: 2024-12-07 22:37:15
原創
993 人瀏覽過

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

為什麼要在 Golang 中使用 *DB.exec() 或準備好的語句?

「為什麼要使用 db.Exec()」

While對於相同的 SQL 語句,您可以互換使用 db.Exec 和 db.Query,它們會產生不同的結果。 db.Exec 傳回受影響的行數(如果驅動程式支援),而 db.Query 傳回 rows 物件。

例如,要計算DELETE 語句中刪除的行數:

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

替代方案(但效率較低):

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需要查詢結果,只需進行錯誤檢查:

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

「或Golang中的預準備語句?驅動程式實作似乎確定是否為每個 db.Query 呼叫建立一個新的準備好的語句。

但是,手動呼叫 db.Prepare 並且快取產生的 db.Stmt 可以增強頻繁執行的查詢的效能。有關更多詳細信息,請參閱 PostgreSQL 文件:https://www.postgresql.org/docs/current/static/sql-prepare.html

以上是我何時以及為什麼應該在 Go 中使用 `db.Exec()` 和準備好的語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板