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