gorm使用

一、介绍

工具

  • 生成struct的工具:https://gorm.io/gen/

二、用法

1. desc获取表字段

1
2
3
4
5
6
7
8
9
fields := []map[string]interface{}{}
// Sqlite
if err := req.DB.Raw(fmt.Sprintf("PRAGMA TABLE_INFO (%s)", req.Table)).Scan(&fields).Error; err != nil {
  return nil, err
}
// MySQL
if err := gormDB.Raw("desc " + table).Find(&fields).Error; err != nil {
  return
}

2. show create table

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
data := map[string]interface{}{}
// SQLite
gormDB.Table("sqlite_master").Where(map[string]interface{}{
  "type": "table",
  "name": req.Table,
}).Scan(&data)
return data["sql"], nil
// MySQL
if err := req.DB.Raw("show create table " + req.Table).Scan(&data).Error; err != nil {
    return nil, err
}
if value, ok := data["Create Table"]; ok {
    if stringValue, ok := value.(string); ok {
       return stringValue, nil
    }
}

3. show tables

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

list := []map[string]interface{}{}
retData := []string{}

// SQLite
if req.IsSQLite() {
  req.DB.Table("sqlite_master").Where(map[string]interface{}{
    "type": "table",
  }).Find(&list)
  for _, value := range list {
    for key, value := range value {
      if key == "name" {
        retData = append(retData, value.(string))
      }
    }
  }
  return retData, nil
}

// MySQL
if err := req.DB.Raw("show tables").Scan(&list).Error; err != nil {
  return nil, err
}
for _, value := range list {
  for _, value := range value {
    retData = append(retData, value.(string))
  }
}
使用 Hugo 构建
主题 StackJimmy 设计