ホームページ >バックエンド開発 >Golang >Go で GORM によって生成された基になる MySQL クエリを表示するにはどうすればよいですか?

Go で GORM によって生成された基になる MySQL クエリを表示するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-22 17:50:11701ブラウズ

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)
}

上記のコードは、カスタム ロガーを使用して開発環境でのみクエリをログに記録します (

GORM v2 では、DB タイプが *gorm.DB に置き換えられていることに注意してください。 *gorm.DB のメソッドと構文は DB のメソッドと構文に似ていますが、* はポインター レシーバーであることを示します。

以上がGo で GORM によって生成された基になる MySQL クエリを表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。