go gorm automigrate 创建表datasets
1.在models/model.go增加atuoMigrate
db.AutoMigrate(Datasets{})完整:
package models
import (
"fmt"
"log"
"time"
nbsp; "github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
"github.com/your_github_name/dongtaipaifang_2_backend/pkg/setting"
)
var db *gorm.DB
type Model struct {
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func init() {
var (
err error
dbType, dbName, user, password, host, port, tablePrefix string
)
nbsp; sec, err := setting.Cfg.GetSection("database")
if err != nil {
log.Fatal(2, "Fail to get section 'database': %v", err)
}
nbsp; dbType = sec.Key("TYPE").String()
dbName = sec.Key("NAME").String()
user = sec.Key("USER").String()
password = sec.Key("PASSWORD").String()
host = sec.Key("HOST").String()
port = sec.Key("PORT").String()
tablePrefix = sec.Key("TABLE_PREFIX").String()
nbsp; db, err = gorm.Open(dbType, fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable",
user,
password,
host,
port,
dbName))
nbsp; if err != nil {
log.Println(err)
}
nbsp; gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
return tablePrefix + defaultTableName
}
nbsp; db.SingularTable(true)
db.LogMode(true)
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
nbsp; // migrate(写所有的表)
db.AutoMigrate(HistoryLoginLogs{})
db.AutoMigrate(Materials{})
db.AutoMigrate(Datasets{})
db.AutoMigrate(Users{})
db.AutoMigrate(VerificationCodes{})
}
func CloseDB() {
defer db.Close()
}2.增加models/datasets.go,写增删改查的方法。类似于:
package models
type Datasets struct {
ID int `gorm:"primary_key" json:"id"`
UserId int `json:"user_id"`
Name string `json:"name"`
PercentageData string `gorm:"type:text" json:"percentage_data"`
DataSheet string `gorm:"type:text" json:"data_sheet"`
DataSheetProcessed string `gorm:"type:text" json:"data_sheet_processed"`
PercentageDataProcessed string `gorm:"type:text" json:"percentage_data_processed"`
Model
}
func GetDatasets(pageNum int, pageSize int, maps interface{}) (datasets []Datasets) {
db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&datasets)
return
}
func GetDatasetTotalCount() (count int) {
db.Model(&Datasets{}).Count(&count)
nbsp; return
}
func GetDatasetTotal(maps interface{}) (count int) {
db.Model(&Datasets{}).Where(maps).Count(&count)
nbsp; return
}
func GetDatasetDetail(id int) (dataSheet Datasets) {
db.Where("id = ?", id).First(&dataSheet)
nbsp; return
}
func AddDataset(name string, UserId int, percentageData [][]string, dataSheet [][]string, dataSheetProcessed [][]string, percentageDataProcessed [][]string) *Datasets {
plan := &Datasets{
Name: name,
PercentageData: convertToString(percentageData),
PercentageDataProcessed: convertToString(percentageDataProcessed),
DataSheet: convertToString(dataSheet),
DataSheetProcessed: convertToString(dataSheetProcessed),
UserId: UserId,
}
db.Create(plan)
nbsp; return plan
}
func UpdateDataset(id int, data interface{}, UserId int) bool {
db.Model(&Datasets{}).Where("id = ?", id).Updates(data).Update("UserId", UserId)
nbsp; return true
}
func DeleteDataset(id int) bool {
db.Where("id = ?", id).Delete(&Datasets{})
nbsp; return true
}3.注意我在models/dataset.go使用了convertToString的方法,但是没有声明,是因为在其他model已经写了,在Dataset中可以直接调用,不需要重复声明:
func convertToString(data [][]string) string {
var result string
for _, row := range data {
result += strings.Join(row, ",") + "\n"
}
return result
}