exist := db.DB.Migrator().HasTable(tableName)
exist := db.hasTable(tableName)
⚠️ 不仅判断不同,许多方法均有一定差别,官方文档如下
Gorm.io/gorm
github.com/jinzhu/gorm
//创建新的应用日志表、仅表结构相同 log_monitor_backend_logs_xyx_srv // BackendLog表名 var bl models.BackendLog BackendLogTableName := bl.TableName() + "_" + name // sql 语句注意字段间空格 if err = tx.Exec("create table " + BackendLogTableName + " (like " + bl.TableName() + " including all)").Error; err != nil { err = fmt.Errorf("gorm.DB.CreateTabel: %w", err) //事务回滚 tx.Rollback() return } //具体方法如下 //创建一个与test表结构相同的表 //复制表结构 create table testb (like test) //复制表结构和数据 create table testa as select * from test //附加参数 (仅结构上复制) create table testd (like test including all); including default including constraints including indexes including storage including comments including all ---把所有属性都复制过去
type UserInfos struct { Id int `gorm:"column:id;default:" json:"id" form:"id"` CreateAt time.Time `gorm:"column:create_at;default:" json:"create_at" form:"create_at"` UpdateAt time.Time `gorm:"column:update_at;default:" json:"update_at" form:"update_at"` GameId int `gorm:"column:game_id;default:" json:"game_id" form:"game_id"` UserId int `gorm:"column:user_id;default:" json:"user_id" form:"user_id"` UserName string `gorm:"column:user_name;default:" json:"user_name" form:"user_name"` Age int `gorm:"column:age;default:" json:"age" form:"age"` Sex int `gorm:"column:sex;default:" json:"sex" form:"sex"` Hobby json.RawMessage `gorm:"column:hobby;default:" json:"hobby" form:"hobby"` DefaultContactReceiveFlag bool `gorm:"column:default_contact_receive_flag;default:" json:"default_contact_receive_flag" form:"default_contact_receive_flag"` } func (u UserInfos) TableName() string { return "user_infos" } // 根据时间查找数据信息 func FindUserInfosByTime(start time.Time, end time.Time, db *gorm.DB) ([]StructModel.UserInfos, int, error) { userInfos := make([]StructModel.UserInfos, 0, 5) var count int //从不同表名中获取数据,封装到相同结构体当中 // db.Table() 操作哪一张表 if e := db.Table("user_infos_xyx_log").Where("create_at between ? and ?", start, end).Find(&userInfos).Count(&count).Error; e != nil { return []StructModel.UserInfos{}, count, e } return userInfos, count, nil } //数据库使用 postgres,不同数据库,db连接不同,请自行连接 // 不同表名,相同结构的表能够封装到 相同的结构体当中 func TestFindUserInfosByTime(t *testing.T) { //连接本地数据库 db, err := gorm.Open("postgres", "host=xxx port=xxx user=xxx dbname=xxx sslmode=disable password=xxx") if err != nil { t.Log(err) } defer db.Close() start := "2021-06-04" parse, err := time.Parse("2006-01-02", start) if err != nil{ t.Log(err) return } end := time.Now() infos, count, err := FindUserInfosByTime(parse, end, db) if err != nil{ t.Log(err) } t.Log(count) t.Log(len(infos)) }