首页 > 后端开发 > Golang > 如何在 Go 中查看 GORM 生成的底层 MySQL 查询?

如何在 Go 中查看 GORM 生成的底层 MySQL 查询?

Mary-Kate Olsen
发布: 2024-12-22 17:50:11
原创
577 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板