Maison >développement back-end >Golang >Comment afficher les requêtes MySQL sous-jacentes générées par GORM dans Go ?

Comment afficher les requêtes MySQL sous-jacentes générées par GORM dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-22 17:50:11624parcourir

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

Comment accéder à la requête MySQL sous-jacente dans Go avec GORM

GORM est une puissante bibliothèque ORM (Object-Relational Mapping) pour Go. Il simplifie les interactions avec les bases de données en fournissant une API propre et intuitive. Cependant, il est parfois utile d'accéder aux requêtes SQL brutes exécutées en dessous. Cela peut être particulièrement utile pour déboguer ou optimiser les interactions de votre base de données.

Récupération du journal des requêtes SQL

Pour obtenir le journal des requêtes SQL de GORM, vous pouvez utiliser le LogMode méthode. Cette méthode prend une valeur booléenne comme argument. Si c'est vrai, GORM enregistrera les requêtes SQL sur la console. Voici comment vous l'utiliseriez :

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

Par défaut, LogMode enregistre toutes les requêtes SQL sur la console. Si vous souhaitez uniquement enregistrer les requêtes dans certains environnements, tels que le développement, vous pouvez utiliser la méthode To pour spécifier la destination :

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

Le code ci-dessus utilise un enregistreur personnalisé pour enregistrer uniquement les requêtes dans les environnements de développement ( lorsque ENV=development).

Notez que dans GORM v2, le type DB a été remplacé par *gorm.DB. Les méthodes et la syntaxe de *gorm.DB sont similaires à celles de DB, mais le * indique qu'il s'agit d'un récepteur de pointeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn