首頁 >後端開發 >Golang >如何在 Go 中查看 GORM 產生的底層 MySQL 查詢?

如何在 Go 中查看 GORM 產生的底層 MySQL 查詢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 17:50:11645瀏覽

How to View Underlying MySQL Queries Generated by GORM in Go?

如何使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn