AdSense

網頁

2022/12/24

Golang GORM 顯示SQL

Go使用GORM ORM套件查詢時顯示SQL的方式如下。


範例環境:

  • Go 1.19
  • GORM 2.0 (gorm.io/gorm v1.24.2)
  • PostgreSQL 14


事前要求

參考「Golang GORM PostgreSQL基本設定」設定資料庫及安裝GORM套件。


範例

呼叫gorm.Open時傳入gorm.Config{Logger: logger.Default.LogMode(logger.Info)}則GORM查詢時會印出實際執行的SQL。

main.go

package main

import (
    "fmt"
    "time"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "gorm.io/gorm/logger"
    "gorm.io/gorm/schema"
)

type Employee struct {...}

const (...)

func getGormDB() *gorm.DB {
    dsn := fmt.Sprintf(...)

    gormDB, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
        NamingStrategy: schema.NamingStrategy{
            SingularTable: true,
        },
        Logger: logger.Default.LogMode(logger.Info), // log GORM query sql
    })
    if err != nil {...}

    return gormDB
}

func main() {
    db := getGormDB()

    emp := Employee{}
    db.First(&emp) // SELECT * FROM employee ORDER BY id LIMIT 1;

}

或使用gorm.DB.Debug進行query操作,則僅印出該操作的SQL的log。

main.go

package main

import (...)

type Employee struct {...}

const (...)

func getGormDB() *gorm.DB {...}

func main() {
    db := getGormDB()

    emp := Employee{}
    db.Debug().First(&emp) // SELECT * FROM employee ORDER BY id LIMIT 1;
}


測試

執行在console印出以下。

2022/12/25 01:54:02 /.../go-demo/main.go:49
[2.618ms] [rows:1] SELECT * FROM "employee" ORDER BY "employee"."id" LIMIT 1


沒有留言:

AdSense