使用 GORM 在 Go 中连接数据库并实现增删改查操作|青训营(实践)

115 阅读7分钟

1.安装 GORM

依赖管理工具:GORM 是一个第三方库,可以使用任何你喜欢的依赖管理工具(如 Go Modules 或者 GOPATH)来管理项目和依赖。在开始之前确保正确配置了依赖管理工具,并设置了合适的环境。具体可在Goland setting中检查配置。

数据库驱动:GORM 支持多种数据库(如 MySQL、PostgreSQL、SQLite 等),但需要相应的数据库驱动程序。在使用 GORM 之前,要确保已经安装了与所使用的数据库对应的驱动程序。

例如,我要利用MySQL数据库,则在运用GORM之前,我需要首先安装好MySQL,安装流程可以依照网上可搜索到的安装步骤进行。通过以下流程查验自己MySQL是否安装成功。

    1. 启动 MySQL 服务:在安装 MySQL 后,通常会同时安装 MySQL 服务。您可以使用系统的服务管理工具(如 systemctl、service)来启动 MySQL 服务。例如,

在 Linux 系统上,可以使用以下命令启动 MySQL 服务:

go
复制代码
```
sudo systemctl start mysql
```

在 Windows 上,可以在服务管理器中启动 MySQL 服务。

    1. 连接到 MySQL 服务器:打开命令行终端或者 MySQL 客户端,尝试连接到 MySQL 服务器。例如,在命令行中输入以下命令:
    css
    复制代码
    mysql -u 用户名 -p
    

    其中,用户名是你在安装 MySQL 时设置的用户名。然后,会提示您输入密码。输入正确的密码后,如果成功连接到 MySQL 服务器,则说明 MySQL 安装成功。

导入 GORM 相关的包。可以通过以下命令安装 GORM:

arduino
复制代码
go get -u gorm.io/gorm

或者如果您使用的是旧版本的 GORM(v1),可以使用以下命令:

arduino
复制代码
go get -u github.com/jinzhu/gorm

了解文档和示例:GORM 提供了详细的文档和示例,建议在安装和使用之前先阅读官方文档,以便更好地理解并正确使用 GORM。您可以访问 GORM 的官方网站 GORM 的官方网站获取相关文档和示例

下载对应数据库驱动程序:以下是一些常见数据库的驱动程序以及使用 go get 命令下载它们的示例:

  • MySQL 驱动程序(go-sql-driver/mysql):

    shell
    复制代码
    go get -u github.com/go-sql-driver/mysql
    
  • PostgreSQL 驱动程序(github.com/lib/pq):

    shell
    复制代码
    go get -u github.com/lib/pq
    
  • SQLite 驱动程序(github.com/mattn/go-sq…

    shell
    复制代码
    go get -u github.com/mattn/go-sqlite3
    
  • Microsoft SQL Server 驱动程序(github.com/denisenkom/…

    shell
    复制代码
    go get -u github.com/denisenkom/go-mssqldb
    
  • Oracle 驱动程序(github.com/godror/godr…

    shell
    复制代码
    go get -u github.com/godror/godror
    

2 配置数据库连接信息

  1. 导入 GORM 和适当的数据库驱动:在 Go 项目代码中引入 GORM 和适合您所使用的数据库类型的数据库驱动程序。例如,因为我使用的是 MySQL 数据库,可以导入以下包:

    go
    复制代码
    import (
        "gorm.io/gorm"
        "gorm.io/driver/mysql"
    )
    
  2. 配置数据库连接信息:在代码中设置数据库连接的详细信息,例如数据库类型、主机地址、端口号、用户名和密码等。以下是一个示例的数据库连接配置:

    go
    复制代码
    dsn := "用户:密码@tcp(localhost:3306)/数据库名?charset=utf8mb4&parseTime=True&loc=Local"
    

    其中,"用户" 是您的 MySQL 用户名,默认是root,"密码" 是用户对应的密码,"localhost:3306" 是 MySQL 的主机地址和端口号,"数据库名" 是您要连接的数据库名称。

3.创建连接

使用 GORM 的 Open 函数创建数据库连接。例如,对于 MySQL 数据库,可以使用以下代码创建连接:

go
复制代码
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        // 处理连接错误
    }

如果连接成功,db 变量将包含 GORM 的数据库连接实例,可以用于后续的数据库操作。

4.模型结构

定义结构模型

首先,你需要定义与数据库表对应的模型结构。在 Go 中,可以使用结构体来表示模型,并在结构体中定义字段、表名以及任何其他必要的注解。例如,下面是一个名为 User 的模型结构示例:

go
复制代码
type User struct {
    gorm.Model
    Name  string
    Email string
}

gorm.Model 是 GORM 提供的基本模型结构,包含了基本的 ID、CreatedAt、UpdatedAt 和 DeletedAt 字段。

此外还可以根据你需要的数据表结构,使用 GORM 的 AutoMigrate 函数自动迁移数据库。这将根据你定义的模型自动创建相应的数据表。这将确保数据库中有与你创建的模型对应的表。例如,对于一个名为 User 的模型结构,可以使用以下代码进行迁移:

go
复制代码
  err = db.AutoMigrate(&User{})
    if err != nil {
        // 处理迁移错误
    }

注意

在此时你也可以在MySQL中去创建对应的数据库(其中1,2即使是使用 GORM 的 AutoMigrate 函数也需要完成) 例如:

  1. 在 MySQL 客户端中,输入以下命令来创建一个名为 test 的数据库:
sql
复制代码
CREATE DATABASE test;
  1. 成功创建数据库后,切换到 test 数据库:
sql
复制代码
USE test;
  1. 接下来,您可以创建一个名为 users 的表,并定义与后续你在DO中会创建的 User 结构体相对应的列。
sql
复制代码
CREATE TABLE users (
    ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(255) NOT NULL,
    Age INT
);

5.增删改查操作

创建数据记录:使用 GORM 的 Create 方法创建数据记录。例如,下面的代码将创建一个新的用户记录:

css
复制代码
```go
user := User{Name: "John Doe", Email: "johndoe@example.com"}
result := db.Create(&user)
if result.Error != nil {
   // 处理创建错误
}
```

查询数据记录:使用 GORM 的 FirstFind 或其他查询方法来获取数据记录。例如,下面的代码将检索第一条满足条件的用户记录:

go
复制代码
var user User
result := db.First(&user)
if result.Error != nil {
    // 处理查询错误
}

如果需要获取多条记录,可以使用 Find 方法。

更新数据记录: 使用GORM 的 Model 方法指定要更新的模型对象,然后使用 UpdatesSave 方法来保存更改。例如,下面的代码将更新用户记录的姓名:

go
复制代码
  result := db.Model(&user).Updates(User{Name: "Jane Doe"})
    if result.Error != nil {
        // 处理更新错误
    }

删除数据记录:使用 GORM 的 Delete 方法删除数据记录。例如,下面的代码将删除特定用户记录:

go
复制代码
    result := db.Delete(&user)
    if result.Error != nil {
        // 处理删除错误
    }

需要注意的是,GORM 会软删除记录(即将记录的 DeletedAt 字段设置为删除时间),除非显示禁用了软删除功能。

6.总结

出现 "panic: 无法执行数据库迁移" 的错误可能是由于以下原因之一:

  1. 数据库连接配置错误:请确保您在打开数据库连接时使用了正确的用户名、密码、主机和端口等信息。检查 dsn 变量的值是否正确,并确保您可以通过提供的凭据连接到数据库。
  2. 数据库权限问题:请确保连接到数据库的用户具有足够的权限执行数据库迁移操作。部分情况下,可能需要管理员或具有相应权限的用户才能执行数据库结构更改。
  3. 数据库表已存在:如果数据库中已经存在名为 users 的表,执行数据迁移时会失败。您可以尝试删除已存在的表,或者使用其他表名进行迁移测试。

解决办法:

1.简单粗暴地在MySQL中去删除相对于数据库并重新创建

2.使用 GORM 提供的 Migrator 对象,并调用其 DropTable() 方法在Goland项目中删除已经存在的数据库表。