首页 > 其他分享 >【go】【gorm】

【go】【gorm】

时间:2024-05-21 10:52:25浏览次数:23  
标签:users db gorm golang go Find name

@

目录


写在前面

  • 相关博文
  • 个人博客首页
  • 免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。

题目


解题 难度

更详细的GORM速查表,涵盖了常见的操作和函数。

  • 模型定义
type User struct {
    gorm.Model // 包含ID, CreatedAt, UpdatedAt, DeletedAt
    Name       string
    Age        int
    Birthday   *time.Time
    Emails     []Email        // 一对多关系
    BillingAddress  Address    // 一对一关系(属于)
    BillingAddressID sql.NullInt64
    ShippingAddress  Address   // 一对一关系
    CreditCard       CreditCard // 一对一关系
    Languages []Language `gorm:"many2many:user_languages;"` // 多对多关系
}

type Email struct {
    ID      int
    UserID  int    `gorm:"index"` // 外键(属于)
    Email   string `gorm:"type:varchar(100);unique_index"` // 字段级别的约束
    Subscribed bool
}

type Address struct {
    ID       int
    Address1 string         `gorm:"not null;unique"` // 设置字段为非空并唯一
    Address2 string         `gorm:"type:varchar(100);unique"`
    Post     sql.NullString `gorm:"not null"`
}

type Language struct {
    ID   int
    Name string `gorm:"index:idx_name_code"` // 创建名为`idx_name_code`的索引
    Code string `gorm:"index:idx_name_code"` // `Code`字段将是复合索引的一部分
}

type CreditCard struct {
    gorm.Model
    UserID  uint
    Number  string
}
  • 连接数据库
// 连接SQLite数据库
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}
// 自动迁移
db.AutoMigrate(&User{}, &Email{}, &Address{}, &Language{}, &CreditCard{})
创建记录
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}

// 创建记录
result := db.Create(&user) // 通过数据的指针来创建

err := result.Error // 处理错误
rowsAffected := result.RowsAffected // 返回插入记录的行数
查询记录
// 获取第一条记录(主键升序)
db.First(&user)
// 获取一条记录,没有指定排序
db.Take(&user)
// 获取最后一条记录(主键降序)
db.Last(&user)

// 获取所有记录
db.Find(&users)
// 条件查询
db.Where("name = ?", "jinzhu").Find(&users)
db.Where("name <> ?", "jinzhu").Find(&users)
db.Where("name IN (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users)

// BETWEEN
db.Where("age BETWEEN ? AND ?", 20, 30).Find(&users)
更新记录
// 更新单个属性(如果更改)
db.Model(&user).Update("name", "jinzhu 2")

// 更新多个属性
db.Model(&user).Updates(User{Name: "jinzhu 2", Age: 20}) // 非零字段

// 更新多个属性,使用map
db.Model(&user).Updates(map[string]interface{}{"name": "jinzhu 2", "age": 20})

// 使用Save更新所有字段,即使它没有更改
db.Save(&user)
删除记录

// Delete - 删除 product
db.Delete(&product, 1)
更多查询方法

// 排序和分组
db.Order("name desc").Find(&users)
db.Order("name desc, age asc").Find(&users)
db.Group("name").Find(&users)

// Count
db.Model(&User{}).Where("name = ?", "jinzhu").Count(&count)

// Limit & Offset
db.Limit(10).Offset(5).Find(&users)
高级查询

// 使用相关模型进行查询
db.Preload("Orders").Find(&users)

// 使用Select指定要检索的字段
db.Select("name", "age").Find(&users)

// 使用Joins进行连接查询
db.Joins("JOIN emails ON emails.user_id = users.id").Find(&users)

// 执行原生SQL
db.Raw("SELECT name, age FROM users WHERE name = ?", "jinzhu").Scan(&result)

参考资料

基础/标准库/第三方库


golang 导航


编程规范


算法|面试


项目


标签:users,db,gorm,golang,go,Find,name
From: https://www.cnblogs.com/nones/p/18203490

相关文章

  • django-vue-admin文件分析
    后端:backend\dvadmin\system\views├──api_white_list.py//接口写入集合管理├──area.py//地区管理:对省市县区域进行管理。├──clause.py//npm包配置文件,里面定义了项目的npm脚本,依赖包等信息......
  • Chan's Algorithm
    Chan'sAlgorithm简介以往常见的求凸包的算法复杂度多为\(\Theta(n\logn)\)(如GrahamScan算法、Andrew算法等),其中\(n\)是平面内的点数。当事先已知大多数点位于凸包内部,只有少数点位于边界上时,也有更高效的算法,如JarvisMarch算法,其复杂度为\(\Theta(nh)\),其中\(h\)......
  • Django性能优化:提升加载速度
    title:Django性能优化:提升加载速度date:2024/5/2020:16:28updated:2024/5/2020:16:28categories:后端开发tags:缓存策略HTTP请求DNS查询CDN分发前端优化服务器响应浏览器缓存第一章:Django性能优化概述1.1性能优化的意义性能优化是Web开发中的关键环节......
  • Python/Go 面试题目整理
    目录一、Python基础知识1.1可变与不可变数据类型1.8深浅拷贝1.2PEP8编程规范1.3匿名函数1.4装饰器1.5迭代器1.6生成器1.7面向对象编程思想1.7.1Python中的__new__和__init__的区别1.7.2反射1.7.3面向对象1.7.4鸭子类型1.7.5你对Python的继承怎么看?1.9GC机制1.10......
  • Google Cloud Next ’24 Recap 开启 AI 新篇章,Cloud Ace 独立解决方案助力企业降本增
    北京时间2024年4月26日,CloudAce云一受邀参与GoogleCloudNext’24Recap在深圳的线下活动,并设置展位。本次活动主要聚焦于Next’24(LasVegas)成果展示,给中国客户和开发者深入解读GoogleCloudNext’24大会上Gemini、VertexAI、BigQuery等产品服务的重要更新,展示了......
  • 让redis集成到django的库--django-redis
    安装pipinstalldjango-redis配置作为cachebackend使用配置为了使用django-redis,你应该将你的djangocachesetting改成这样:CACHES={"default":{"BACKEND":"django_redis.cache.RedisCache","LOCATION":"r......
  • django rest django.core.exceptions.ImproperlyConfigured: Could not resolve URL f
    使用:HyperlinkedRelatedField报错信息django.core.exceptions.ImproperlyConfigured:CouldnotresolveURLforhyperlinkedrelationshipusingviewname"fk_table:album_list".YoumayhavefailedtoincludetherelatedmodelinyourAPI,orincorrectly......
  • django添加路由访问helloworld
    一、应用层面路由配置:新建urls.py文件二、项目层路由配置 三、把应用添加到项目配置文件四、运行项目  运行成功......
  • 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。有关
    无法加载文件C:\ProgramFiles\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.micros  原因:现用执行策略是Restricted(默认设置)解决方法:1、使用管理员的身份打开powershell, win+x2、输入set-executionpolicyremotesigned后按y,问题得......
  • 创建django项目目录介绍
    项目层次:创建django项目自动生成的一些.py的目录文件命令运行检查是否创建成功访问http://127.0.0.1:8000/应用层次:创建应用:pythonmanage.pystartappblog项目管理文件manage.py,创建应用的命令startapp,应用名blog 应用目录介绍: ......