Golang ORM操作SQLite数据库

我想在Golang项目中使用ORM操作SQLite数据库,但不太清楚具体该怎么做。请问有哪些推荐的Golang ORM框架适合操作SQLite?使用时需要注意哪些性能优化和常见问题?能否提供一个简单的CRUD示例代码?

2 回复

使用Golang操作SQLite的ORM,推荐GORM:

  1. 安装依赖:
go get gorm.io/gorm
go get gorm.io/driver/sqlite
  1. 基础用法:
import (
  "gorm.io/driver/sqlite"
  "gorm.io/gorm"
)

type User struct {
  ID   uint
  Name string
  Age  int
}

func main() {
  db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
  if err != nil {
    panic("连接数据库失败")
  }
  
  // 自动迁移
  db.AutoMigrate(&User{})
  
  // 创建记录
  db.Create(&User{Name: "张三", Age: 25})
  
  // 查询
  var user User
  db.First(&user, 1) // 查询ID=1的用户
  
  // 更新
  db.Model(&user).Update("Age", 26)
  
  // 删除
  db.Delete(&user)
}
  1. 特点:
  • 支持事务、预加载、关联查询
  • 自动建表、字段映射
  • 链式调用,API友好

注意:SQLite并发写入性能有限,适合轻量级应用。

更多关于Golang ORM操作SQLite数据库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在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提供了丰富的功能,包括关联关系、钩子函数、预加载等,可以满足大部分数据库操作需求。

回到顶部