基本语法
模型创建,记录添加
//模型声明,采用结构体
type Topics struct {
gorm.Model
Name string
}
type Todos struct {
gorm.Model
Text string
TopicID uint//自动处理外键
}
//创建数据库
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
//在数据库中创建表
db.AutoMigrate(&Topics{})
db.AutoMigrate(&Todos{})
// Create
db.Create(&Topics{Name: "learn"})
db.Create(&Topics{Name: "life"})
db.Create(&Todos{Text: "啊哦", TopicID: 1})
db.Create(&Todos{Text: "buy apples", TopicID: 2})
//Read
//Update
//Delete
注:GORM能够自动处理表中的外键,在模型声明时将其按照规定表示外键即可
查询
检索全部对象
| // Get all records result := db.Find(&users) // SELECT * FROM users; result.RowsAffected // returns found records count, equals len(users) result.Error // returns error |
附带条件的查询 gorm.io/zh_CN/docs/…
需要注意的一些小tips
(这些问题都是根据自己的实际测试结合文档得到的)
模型声明相关问题
声明模型时,模型结构体中,键的命名需要使用大驼峰命名法,小写的键会被gorm忽略掉,这是为了在代码中能够区分目前正在操作的数据是来自于模型结构体(大写)还是来着于数据库(小写),在大驼峰命名法的条件下,所有键名都会转化为数据库表中以小写+下划线方式的键名(这种小写+下划线的形式是数据库的默认规范形式)
向数据库中添加数据时的问题
插入记录是否可以空置的问题
在操作的数据库为sqlite的条件下,插入记录中的键值对序列中可以为空,判定为空的情况有两种,一是直接不写入此键值对(),第二种是写明键值对,但是将值置空 这两种方式都不会触发严重异常,能够成功向数据库写入不完全的记录