Heim >Backend-Entwicklung >Golang >Wie kann ich zugrunde liegende MySQL-Abfragen anzeigen, die von GORM in Go generiert wurden?

Wie kann ich zugrunde liegende MySQL-Abfragen anzeigen, die von GORM in Go generiert wurden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 17:50:11623Durchsuche

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

So greifen Sie mit GORM auf die zugrunde liegende MySQL-Abfrage in Go zu

GORM ist eine leistungsstarke ORM-Bibliothek (Object-Relational Mapping) für Go. Es vereinfacht Datenbankinteraktionen durch die Bereitstellung einer sauberen und intuitiven API. Manchmal ist es jedoch nützlich, auf die Roh-SQL-Abfragen zuzugreifen, die darunter ausgeführt werden. Dies kann besonders beim Debuggen oder Optimieren Ihrer Datenbankinteraktionen hilfreich sein.

Abrufen des SQL-Abfrageprotokolls

Um das SQL-Abfrageprotokoll von GORM abzurufen, können Sie den LogMode verwenden Verfahren. Diese Methode verwendet einen booleschen Wert als Argument. Wenn „true“, protokolliert GORM die SQL-Abfragen in der Konsole. So würden Sie es verwenden:

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

Standardmäßig protokolliert LogMode alle SQL-Abfragen an der Konsole. Wenn Sie Abfragen nur in bestimmten Umgebungen protokollieren möchten, z. B. in der Entwicklung, können Sie die To-Methode verwenden, um das Ziel anzugeben:

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

Der obige Code verwendet einen benutzerdefinierten Logger, um nur Abfragen in Entwicklungsumgebungen zu protokollieren ( wenn ENV=Entwicklung).

Beachten Sie, dass in GORM v2 der DB-Typ durch *gorm.DB ersetzt wurde. Die Methoden und die Syntax für *gorm.DB ähneln denen von DB, das * zeigt jedoch an, dass es sich um einen Zeigerempfänger handelt.

Das obige ist der detaillierte Inhalt vonWie kann ich zugrunde liegende MySQL-Abfragen anzeigen, die von GORM in Go generiert wurden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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