Gorm框架中有关操作数据库表
2021/6/5 19:26:16
本文主要是介绍Gorm框架中有关操作数据库表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
GORM框架有关Table的语句
1、根据表名查看当前表在数据库中是否存在
Gorm.io/gorm 包下
exist := db.DB.Migrator().HasTable(tableName)
github.com/jinzhu/gorm包下
exist := db.hasTable(tableName)
⚠️ 不仅判断不同,许多方法均有一定差别,官方文档如下
Gorm.io/gorm
github.com/jinzhu/gorm
2、根据数据库中的表创建相同结构、数据的表,表名不相同
//创建新的应用日志表、仅表结构相同 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 ---把所有属性都复制过去
3、从不同名表中获取数据,可封装到相同结构体当中
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)) }
这篇关于Gorm框架中有关操作数据库表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26go.mod的文件内容是什么?-icode9专业技术文章分享
- 2024-11-23MongoDB身份认证机制揭秘!
- 2024-11-20MongoDB教程:从入门到实践详解
- 2024-11-17执行 Google Ads API 查询后返回的是空数组什么原因?-icode9专业技术文章分享
- 2024-11-17google广告数据不同经理账户下的凭证可以获取对方的api数据吗?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼