首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

golang gin gorm插入并设置primary_key,但primary_key为空

在使用Golang的Gin框架和Gorm ORM库进行开发时,如果需要插入数据并设置主键(primary key),但主键的值为空,可以按照以下步骤进行操作:

  1. 首先,确保已经正确安装了Gin和Gorm,并导入相应的包。
代码语言:txt
复制
import (
    "github.com/gin-gonic/gin"
    "gorm.io/gorm"
)
  1. 创建一个结构体来表示要插入的数据表,并在结构体中定义主键字段。
代码语言:txt
复制
type User struct {
    ID   uint   `gorm:"primaryKey"`
    Name string `gorm:"not null"`
    Age  int
}

在上述代码中,我们使用gorm:"primaryKey"标签来指定主键字段,并使用gorm:"not null"标签来指定该字段不能为空。

  1. 在路由处理函数中,创建一个新的User对象,并将其插入到数据库中。
代码语言:txt
复制
func createUser(c *gin.Context) {
    var user User
    if err := c.ShouldBindJSON(&user); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // 手动设置主键为空
    user.ID = 0

    // 插入数据
    if err := db.Create(&user).Error; err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"message": "User created successfully", "data": user})
}

在上述代码中,我们首先使用c.ShouldBindJSON方法将请求的JSON数据绑定到User对象上。然后,手动将主键字段设置为空(0)。最后,使用db.Create方法将User对象插入到数据库中。

需要注意的是,上述代码中的db是一个已经初始化好的Gorm数据库连接对象。

  1. 在路由中注册该处理函数。
代码语言:txt
复制
router := gin.Default()
router.POST("/users", createUser)

在上述代码中,我们将createUser函数注册为处理POST请求的/users路由。

至此,我们完成了使用Golang的Gin框架和Gorm ORM库插入数据并设置主键为空的操作。

关于Golang、Gin和Gorm的更多详细信息,您可以参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

go web开发 (gin&gorm) 之DB配置及DAO的基本使用

在正式进入主题前,先说说框架的现状,个人用的是gin-gonic框架,这是个在校大学生写的基于go语言的高性能web框架,在此之前我对比过beego 、 iris 、gin-gonic这几个在维护频度和依赖支持以及...63 具体连接方式> 64 host=myhost port=myport user=gorm dbname=gorm password=mypassword..." 11 _ "github.com/jinzhu/gorm/dialects/postgres" 12 "github.com/shen100/golang123/config" 13...方法来打开db的连接,连接正常打开后设置连接池(空闲连接数、最大连接数),到这儿基本就完成了,不过,需要注意到的是:gorm默认的结构体映射是复数形式,比如你的博客表blog,对应的结构体名就会是blogs...id" 由于go的特性,所有为(null)字段均在记录操作的时候以代替,介意的话可以将字段设置一个默认值,或者给表字段添加一个默认值。

2.9K30

Go 语言反射和范型在 API 服务中的应用

API 框架提供的抽取参数的方式并不满足需求   当然 API 框架会提供这些功能,不过有些情况不能满足需求,比如gin-gonic,提供了将将 request 转为对应结构体的函数,存在两个问题,第一个问题是参数区分大小写...Python 对于 struct 参数没有严格的限制,传什么内容都行,Golang 就没那么友好了,这部分要靠范型来处理。...数据的连接需要提前建立好,并按照代码中的用户名、密码、地址、端口和数据库名称建立,不然代码无法运行成功);之后在数据库中建立了一个叫 User 的表;之后有一个创建用户的接口 "POST /users",对应的函数.../gin" "github.com/jinzhu/gorm" ) type User struct { ID uint `json:"id" gorm:"...PRIMARY_KEY;AUTO_INCREMENT"` Name string `json:"name" gorm:"INDEX:name;UNIQUE;NOT NULL

1K20

记一次 Gorm 批量插入遇到的问题以及解决方案

文章目录 问题现象 解决方案 问题现象 最初,我们用的是老版本的 Gorm,但是因为老版本不支持批量插入的功能,所以我们将 Gorm 做了升级,升级到1.21.9版本。...https://github.com/go-gorm/gorm/releases/tag/v1.21.9 升级之后,Gorm 确实支持了批量插入的功能。...问题的现象是,我们批量插入了三条记录,数据库自增生成的 ID 分别是 1074、1076 和 1078, Gorm 返回的结果中,记录的 ID 分别是 1074、1075 和 1076,这意味着 Gorm...解决方案 在出现问题之前,我们用于接收数据库记录的结构: type Record struct { ID int64 `gorm:"primary_key;column:id...,为了解决这个问题,我们用于接收数据库记录的结构修改为: type Record struct { ID int64 `gorm:"primary_key;column:id;

4.6K20

基于Gin + GORM + Vue的前后端分离项目实践

创建MySQL容器 使用MySQL镜像创建一个名为mysql-db的容器,设置MYSQL_ROOT_PASSWORD变量指定MySQL的root账户密码: docker run -p 3306:3306...root密码123456 - mysql:8:使用mysql:8镜像启动容器 4....登录MySQL创建数据库 登录刚启动的mysql-db容器,用root用户和设置的密码登录MySQL: docker exec -it mysql-db mysql -uroot -p123456 然后在...具体使用什么工具,需要根据项目的需求和复杂度来选择,目前主流还是使用GORM 可以比较简单的完成包括连接数据库、创建表、增删改查等一系列操作,大大简化了Go语言操作MySQL的难度。...来一个简单示例: type User struct { gorm:"primary_key" ID int Name string } db, err := gorm.Open("mysql",

36410

Go语言ORM-gorm学习笔记(一)

= nil { panic(err) } } 模型定义 模型(Models)通常只是正常的golang structs、基本的go类型或它们的指针。...设置字段大小255 MemberNumber *string `gorm:"unique;not null;comment:'会员卡号'"` // 使用tag标记 unique 设置唯一 使用tag...标记 not null 设置字段属性不为 Num int `gorm:"AUTO_INCREMENT;comment:'数量'"` // 使用tag标记 AUTO_INCREMENT 设置字段自增...支持的结构体标记(Struct tags) 结构体标记(Tag) 描述 Column 指定列名 Type 指定列数据类型 Size 指定列大小,默认值255 PRIMARY_KEY 将列指定为主键 UNIQUE...,如果多个索引同名则创建复合索引 UNIQUE_INDEX 和INDEX类似,只不过创建的是唯一索引 EMBEDDED 将结构设置嵌入 EMBEDDED_PREFIX 设置嵌入结构的前缀 - 忽略此字段

1.5K40

一文带你了解 GORM Model

GORM 默认模型GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体。...string `gorm:"size:255"` // 设置字段大小255 MemberNumber \*string `gorm:"unique;not null"` // 设置会员号(member...number)唯一并且不为 Num int `gorm:"AUTO\_INCREMENT"` // 设置 num 自增类型 Address string...创建具有或不带名称的索引, 如果多个索引同名则创建复合索引 || UNIQUE_INDEX | 和 INDEX 类似,只不过创建的是唯一索引 || EMBEDDED | 将结构设置嵌入...string Age int64}表名表名默认是结构体名称的复数, 也可以取消默认复数表名type User struct {} // 默认表名是 `users`// 将 User 的表名设置

42730

Go开源ORM——GORM

gorm.Model中定义了数据库表的一些常用基本字段 type Model struct { ID uint `gorm:"primary_key"` CreatedAt time.Time.../更新记录 gorm.Model的主键ID整数类型,映射到数据库时自动递增主键 Save方法接收一个结构体指针对象 db, _ := gorm.Open("mysql", "root:root@/gorm...插入记录 Create方法用法与Save类似,不同的是Create方法只能用于插入,如果对象具备主键,并且数据库中已经存在该主键记录,则抛出异常 db, _ := gorm.Open("mysql",...,如果该对象主键或者0,或者数据库表中不存在该主键记录,返回true,否则返回false,所以可以用于辅助Create方法 ... if(db.NewRecord(&user)){ db.Create...Updates(User{Name: "", Age: 0, Actived: false}) 删除 通过Delete方法删除记录,如果记录中包含了DeletedAt字段,那么将不会真正删除该记录,只是设置了该记录的该字段当前时间

2.1K41

『No18: Go 实现世界杯后台管理系统』

主要使用到的技术是: gin 快速搭建 web server gin-swagger 自动化构建API 文档 gorm 操作数据库 fresh 实现 web server 监听 viper 实现读取用户配置...使用 gorm 你可以很方便的实现 数据库的增删改查。 第四步: 既然数据有了,那么如何实现后台管理系统? 应该是要使用 restful API 实现 资源的增删改查。 推荐使用 gin 。...数据库表定义和响应信息定义 数据库表定义操控 gorm model 的定义,类型,非,默认值等使用 tag 实现 // awards 表定义 type Award struct { ID...uint `gorm:"primary_key;column:id"` AwardName string `gorm:"type:varchar(64);not null;column:award_name..."` URL string `gorm:"type:varchar(128);not null;column:url"` Info string `gorm:"type

88710
领券