Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melihat Pertanyaan MySQL Dasar yang Dijana oleh GORM dalam Go?

Bagaimana untuk Melihat Pertanyaan MySQL Dasar yang Dijana oleh GORM dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-22 17:50:11622semak imbas

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

Cara Mengakses Pertanyaan MySQL Dasar dalam Go dengan GORM

GORM ialah perpustakaan ORM (Pemetaan Perhubungan Objek) yang berkuasa untuk Go. Ia memudahkan interaksi pangkalan data dengan menyediakan API yang bersih dan intuitif. Walau bagaimanapun, kadangkala ia berguna untuk mengakses pertanyaan SQL mentah yang sedang dilaksanakan di bawahnya. Ini boleh membantu terutamanya untuk menyahpepijat atau mengoptimumkan interaksi pangkalan data anda.

Mendapatkan semula Log Pertanyaan SQL

Untuk mendapatkan log pertanyaan SQL daripada GORM, anda boleh menggunakan LogMode kaedah. Kaedah ini mengambil nilai boolean sebagai hujah. Jika benar, GORM akan log pertanyaan SQL ke konsol. Begini cara anda menggunakannya:

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

Secara lalai, LogMode log semua pertanyaan SQL ke konsol. Jika anda hanya ingin melog pertanyaan dalam persekitaran tertentu, seperti pembangunan, anda boleh menggunakan kaedah Kepada untuk menentukan destinasi:

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

Kod di atas menggunakan pengelog tersuai untuk hanya log pertanyaan dalam persekitaran pembangunan ( apabila ENV=pembangunan).

Perhatikan bahawa dalam GORM v2, jenis DB telah digantikan dengan *gorm.DB. Kaedah dan sintaks untuk *gorm.DB adalah serupa dengan DB, tetapi * menunjukkan bahawa ia adalah penerima penunjuk.

Atas ialah kandungan terperinci Bagaimana untuk Melihat Pertanyaan MySQL Dasar yang Dijana oleh GORM dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn