如何使用 GORM 存取 Go 中的底層 MySQL 查詢
GORM 是一個強大的 Go ORM(物件關係映射)函式庫。它透過提供乾淨直覺的 API 來簡化資料庫互動。然而,有時存取正在底層執行的原始 SQL 查詢很有用。這對於調試或優化資料庫互動特別有幫助。
擷取 SQL 查詢日誌
要從 GORM 取得 SQL 查詢日誌,您可以使用 LogMode方法。此方法採用布林值作為參數。如果為 true,GORM 會將 SQL 查詢記錄到控制台。使用方法如下:
package main import ( "gorm.io/gorm" "log" ) func main() { db, err := gorm.Open("mysql", "user:password@tcp(localhost:3306)/database_name") if err != nil { log.Fatal(err) } // Enable log mode db.LogMode(true) var todos []Todo db.Find(&todos) db.Preload("User").Find(&todos) }
預設情況下,LogMode 將所有 SQL 查詢記錄到控制台。如果您只想在某些環境(例如開發)中記錄查詢,可以使用To 方法指定目的地:
import ( "fmt" "gorm.io/gorm/logger" "log" "os" ) type DevLogger struct { logger.Interface } func (l *DevLogger) Printf(level logger.Level, format string, v ...interface{}) { if level == logger.Info || os.Getenv("ENV") == "development" { fmt.Println("QUERY: ", fmt.Sprintf(format, v...)) } } func main() { db, err := gorm.Open("mysql", "user:password@tcp(localhost:3306)/database_name?parseTime=true") if err != nil { log.Fatal(err) } db.Logger = &DevLogger{Interface: logger.Discard} var todos []Todo db.Find(&todos) db.Preload("User").Find(&todos) }
上面的程式碼使用自訂記錄器僅記錄開發環境中的查詢(當ENV=development 時)。
請注意,在 GORM v2 中,DB 類型已替換為 *gorm.DB。 *gorm.DB 的方法和語法與 DB 類似,但 * 表示它是指標接收器。
以上是如何在 Go 中查看 GORM 產生的底層 MySQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!