gorm踩的坑

gorm的那些坑

1. db.SingularTable(true)

在Gorm中,表名是结构体名的复数形式,列名是字段名的蛇形小写。即,如果有一个user表,那么如果你定义的结构体名为:User,gorm会默认表名为users而不是user。

db.SingularTable(true) 让grom转义struct名字的时候不用加上s

2. Rows.Next() 需要关闭

每次返回的rows 都是新的实例,占用一个数据库连接. rows.next()直到false 就会关闭,否则就会出现资源没有被回收,但数据库设置的超时回收也会去回收 但是会降低服务Tps。

user := new(User)
rows, err := engine.Where("id >?", 1).Rows(user)
if err != nil {
}
defer rows.Close()
for rows.Next() {
    err = rows.Scan(user)
} 

3. Scan error on column index 1, name “created_at”: unsupported Scan, storing driver.Value type []uint8

parseTime是查询结果是否自动解析为时间。+loc是MySQL的时区设置

parseTime=True&loc=Local

4. NewRecord和Create

db.NewRecord(user) // => 主键为空返回true
db.Create(&user)

NewRecord 检查主键是否存在
Create 即执行 insert 操作

### GORM 基本概念与功能 GORM 是一种用于 Go 的对象关系映射 (ORM) 工具,它提供了简单而强大的接口来操作数据库[^1]。通过 GORM,开发者可以轻松实现数据模型定义、迁移以及 CRUD 操作等功能。 #### 安装 GORM 和驱动程序 要使用 GORM,首先需要安装其依赖项和对应的数据库驱动程序。以下是针对不同数据库的安装命令: ```bash go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # 对于 MySQL 数据库 go get -u gorm.io/driver/postgres # 对于 PostgreSQL 数据库 go get -u gorm.io/driver/sqlite # 对于 SQLite 数据库 ``` #### 创建连接到数据库实例 下面是一个简单的例子,展示如何创建并初始化一个 GORM 实例并与数据库建立连接: ```go package main import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { fmt.Println(err) return } fmt.Println("Connected to the database successfully!") } ``` 此代码片段展示了如何打开一个新的 SQLite 连接,并打印成功消息如果一切正常运行的话[^1]。 #### 自动迁移支持 GORM 提供了一个自动迁移的功能,允许基于结构体字段自动生成表结构变化脚本。这使得管理数据库模式变得更加容易。 ```go type User struct { ID uint Name string Age int } db.AutoMigrate(&User{}) // 将会根据 `User` 结构体创建对应的数据表 ``` 上面的例子说明了当调用 AutoMigrate 方法时,GORM 如何依据给定的结构体去更新或者新建相应的表格。 #### 执行基本查询操作 执行基础增删改查的操作也非常直观,在这里提供几个常见的示例: 增加记录: ```go user := User{Name: "John Doe", Age: 30} result := db.Create(&user) fmt.Println(result.RowsAffected) // 输出受影响行数 ``` 查找单条记录: ```go var user User db.First(&user, 1) // 查找 ID=1 的第一条记录 fmt.Printf("%v\n", user.Name) ``` 删除记录: ```go db.Delete(&user, 1) // 删除 ID=1 的记录 ``` 这些只是 GORM 功能的一小部分演示;更多高级特性如事务处理、嵌套预取等都可以在其官方文档找到详细描述[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值