Golang ORM操作SQLite数据库
我想在Golang项目中使用ORM操作SQLite数据库,但不太清楚具体该怎么做。请问有哪些推荐的Golang ORM框架适合操作SQLite?使用时需要注意哪些性能优化和常见问题?能否提供一个简单的CRUD示例代码?
2 回复
在Golang中操作SQLite数据库,推荐使用GORM库配合SQLite驱动。以下是完整示例:
1. 安装依赖
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
2. 基本使用示例
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
// 定义数据模型
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100"`
Email string `gorm:"uniqueIndex"`
Age int
}
func main() {
// 连接SQLite数据库
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
panic("连接数据库失败")
}
defer func() {
sqlDB, _ := db.DB()
sqlDB.Close()
}()
// 自动迁移(创建表)
db.AutoMigrate(&User{})
// 创建记录
user := User{Name: "张三", Email: "zhangsan@example.com", Age: 25}
db.Create(&user)
// 查询记录
var result User
db.First(&result, "email = ?", "zhangsan@example.com")
// 更新记录
db.Model(&result).Update("Age", 26)
// 删除记录
db.Delete(&result)
}
3. 常用操作
查询操作
// 根据主键查询
db.First(&user, 1)
// 条件查询
db.Where("age > ?", 20).Find(&users)
// 排序和分页
db.Order("created_at desc").Limit(10).Offset(0).Find(&users)
事务操作
db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(&user1).Error; err != nil {
return err
}
if err := tx.Create(&user2).Error; err != nil {
return err
}
return nil
})
4. 连接配置
dsn := "file:test.db?cache=shared&mode=rwc"
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
GORM提供了丰富的功能,包括关联关系、钩子函数、预加载等,可以满足大部分数据库操作需求。


