Gorm: 请教一个问题,基于 gorm 如何进行 mysql 系统变量的查询

Created on 16 Aug 2019  ·  3Comments  ·  Source: go-gorm/gorm

例如,我想要完成如下查询

show global variables like 'read_only';

目前我操作下来发现:

  • gorm.Open(...) 时需要指定 database ,而在仅需要查询系统变量的时候,本可以不指定这个的(但这个不算问题吧,我可以随便指定一个,不影响系统变量的查询)
  • 我想通过 db.Raw("show global variables like 'read_only'").Scan(&result) 的形式获取系统变量的值,但我不知道如何定义这个 result 结构;
  • 在 gorm 仓库中没有找到类似的例子,在其他人的 example 代码中也没看到

请问这种查询应该如何操作,能否提供一个示例程序?多谢

Most helpful comment

type sqlVariables struct {
    SQLMode string `gorm:"column:SQLMode"`
}
var variables sqlVariables
err := db.Raw("select @@sql_mode as SQLMode").Scan(&variables).Error
if err != nil {
   //todo
}
fmt.Println("SQLMode:" + variables.SQLMode)
//output
//SQLMode:NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • with show command
type sqlVariables struct {
    VariableName  string `gorm:"column:Variable_name"`
    VariableValue string `gorm:"column:Value"`
}

var variables []sqlVariables
sql := `show global variables like 'read_only'`
err := db.Raw(sql).Scan(&variables).Error
if err != nil {
    //todo
}
fmt.Printf("sqlVariables:\n%+v\n", variables)
//output
//sqlVariables:
//[{VariableName:read_only VariableValue:OFF}]

All 3 comments

type sqlVariables struct {
    SQLMode string `gorm:"column:SQLMode"`
}
var variables sqlVariables
err := db.Raw("select @@sql_mode as SQLMode").Scan(&variables).Error
if err != nil {
   //todo
}
fmt.Println("SQLMode:" + variables.SQLMode)
//output
//SQLMode:NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
type sqlVariables struct {
    SQLMode string `gorm:"column:SQLMode"`
}
var variables sqlVariables
err := db.Raw("select @@sql_mode as SQLMode").Scan(&variables).Error
if err != nil {
   //todo
}
fmt.Println("SQLMode:" + variables.SQLMode)
//output
//SQLMode:NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • with show command
type sqlVariables struct {
    VariableName  string `gorm:"column:Variable_name"`
    VariableValue string `gorm:"column:Value"`
}

var variables []sqlVariables
sql := `show global variables like 'read_only'`
err := db.Raw(sql).Scan(&variables).Error
if err != nil {
    //todo
}
fmt.Printf("sqlVariables:\n%+v\n", variables)
//output
//sqlVariables:
//[{VariableName:read_only VariableValue:OFF}]

A new way with Pluck method:

var values []string
err := db.Raw("select @@global.sql_mode as value").Pluck("value", &values).Error
if err != nil {
   //todo
}
fmt.Println("SQLMode:" + variables[0])
Was this page helpful?
0 / 5 - 0 ratings

Related issues

alanyuen picture alanyuen  ·  3Comments

kumarsiva07 picture kumarsiva07  ·  3Comments

superwf picture superwf  ·  3Comments

koalacxr picture koalacxr  ·  3Comments

pjebs picture pjebs  ·  3Comments