---
title: "beego ORM 连接 OceanBase 数据库示例程序 - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: beego ORM 连接 OceanBase 数据库示例程序 功能适用性 beego ORM 适用于 OceanBase 数据库 MySQL 模式。 beego ORM 是一个强大的 Go 语言 ORM 框架，专为 Go 应用程序设计。它具有以下特点： 支持完整的 ORM 功能，包括模型定义、CRUD 操作和关联关系…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.5 LTS

# beego ORM 连接 OceanBase 数据库示例程序

更新时间：2026-04-09 14:12:04

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/680.ecological-integration/200.orms-frameworks/300.go/200.beego-orm-connection-oceanbase-database-program.md)

#### 功能适用性

beego ORM 适用于 OceanBase 数据库 MySQL 模式。

beego ORM 是一个强大的 Go 语言 ORM 框架，专为 Go 应用程序设计。它具有以下特点：

- 支持完整的 ORM 功能，包括模型定义、CRUD 操作和关联关系
 - 支持 MySQL、PostgreSQL、SQLite 等主流数据库
 - 提供自动建表、事务处理等高级功能
 - 与 beego 框架完美集成，同时也可以独立使用

本文将介绍如何使用 beego ORM 连接 OceanBase 数据库，实现基本的数据库操作，包括创建表、插入数据、更新数据和查询数据等。

## 前提条件

- 您已安装 Go 1.13 或更高版本。
 - 您已安装 OceanBase 数据库并且创建了 MySQL 模式租户。
 - 您已获取 OceanBase 数据库连接串。

## 操作步骤

1. 获取 OceanBase 数据库连接串。
 2. 安装 beego ORM 和 MySQL 驱动。
 3. 编写 `main.go` 文件，实现数据库操作。
 4. 运行程序并验证结果。

### 步骤一：获取 OceanBase 数据库连接串

联系 OceanBase 数据库部署人员或者管理员获取相应的数据库连接串。

```shell
obclient -h$host -P$port -u$user_name -p$password -D$database_name

```

**参数说明：**

- `$host`：提供 OceanBase 数据库连接 IP。OceanBase 数据库代理（OceanBase Database Proxy，ODP）连接方式使用的是一个 ODP 地址；直连方式使用的是 OBServer 节点的 IP 地址。
 - `$port`：提供 OceanBase 数据库连接端口。ODP 连接的方式默认是 `2883`，在部署 ODP 时可自定义；直连方式默认是 `2881`，在部署 OceanBase 数据库时可自定义。
 - `$database_name`：需要访问的数据库名称。

  #### 注意

  连接租户的用户需要拥有该数据库的 `CREATE`、`INSERT`、`UPDATE` 和 `SELECT` 权限。更多有关用户权限的信息，请参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016100)。
 - `$user_name`：提供租户的连接账户。ODP 连接的常用格式：`用户名@租户名#集群名` 或者 `集群名:租户名:用户名`；直连方式格式：`用户名@租户名`。
 - `$password`：提供账户密码。

更多连接串的信息，请参见 [通过 OBClient 连接 OceanBase 租户](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013251)。

**示例如下：**

```shell
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest

```

### 步骤二：安装 Go 语言和 beego ORM

若您已经安装了 Go 语言和 beego ORM，可以直接跳过此步骤。若您未安装，可根据以下步骤进行安装。

1. 安装 Go 语言

      1. 更新系统包并安装必要的依赖：

        ```bash
        sudo apt update
        sudo apt install -y wget

        ```
      2. 下载并安装 Go 语言：

        ```bash
        # 下载最新版本的 Go（请访问 https://golang.org/dl/ 获取最新版本）
        wget https://dl.google.com/go/go1.20.6.linux-amd64.tar.gz

        # 解压到 /usr/local 目录
        sudo tar -C /usr/local -xzf go1.20.6.linux-amd64.tar.gz

        # 删除安装包
        rm go1.20.6.linux-amd64.tar.gz

        ```
      3. 配置环境变量：

        ```bash
        # 编辑 ~/.bashrc 文件
        echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
        echo 'export GOPATH=$HOME/go' >> ~/.bashrc
        echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc

        # 使配置生效
        source ~/.bashrc

        ```
      4. 验证安装：

        ```bash
        go version

        ```

        如果安装成功，将显示类似以下内容：

        ```bash
        go version go1.20.6 linux/amd64

        ```
 2. 安装 beego ORM 和 MySQL 驱动

      1. 创建工作目录并初始化 Go 模块：

        ```bash
        mkdir -p ~/go/src/beego-oceanbase
        cd ~/go/src/beego-oceanbase
        go mod init beego-oceanbase

        ```
      2. 安装 beego ORM 和 MySQL 驱动：

        ```bash
        go get -u github.com/beego/beego/v2
        go get -u github.com/go-sql-driver/mysql

        ```
      3. （可选）如果由于网络原因无法直接安装，可以设置 Go 代理：

        ```bash
        go env -w GOPROXY=https://goproxy.cn,direct

        ```

        然后重新执行安装命令。
 3. 验证安装：

   ```bash
   go list -m github.com/beego/beego/v2
   go list -m github.com/go-sql-driver/mysql

   ```

   如果安装成功，将显示相应的版本信息。

### 步骤三：编写 main.go 文件实现数据库操作

1. 创建一个名为 `main.go` 的文件，并添加以下代码：

   ```go
   package main

   import (
       "fmt"
       "time"
       "github.com/beego/beego/v2/client/orm"
       _ "github.com/go-sql-driver/mysql"
       "github.com/beego/beego/v2/core/logs"
   )

   // User 定义用户模型
   type User struct {
       Id       int       `orm:"auto;pk"`
       Username string    `orm:"size(100)"`
       Email    string    `orm:"size(100);unique"`
       Age      int       `orm:"null"`
       Created  time.Time `orm:"auto_now_add;type(datetime)"`
       Updated  time.Time `orm:"auto_now;type(datetime);null"`
   }

   // TableName 指定表名
   func (u *User) TableName() string {
       return "users"
   }

   func init() {
       // 初始化日志
       logs.Reset()
       logs.EnableFuncCallDepth(true)
       logs.SetLogFuncCallDepth(3)

       // 注册 MySQL 驱动
       err := orm.RegisterDriver("mysql", orm.DRMySQL)
       if err != nil {
           logs.Error("注册 MySQL 驱动失败:", err)
           return
       }

       // 注册数据库
       dataSource := "root@mysql001:**********@tcp(xxx.xxx.xxx.xxx:2881)/db_test?charset=utf8mb4&parseTime=true&loc=Local"
       err = orm.RegisterDataBase("default", "mysql", dataSource)
       if err != nil {
           logs.Error("注册数据库失败:", err)
           return
       }

       // 设置连接池
       db, err := orm.GetDB("default")
       if err != nil {
           logs.Error("获取数据库连接失败:", err)
           return
       }
       db.SetMaxIdleConns(10)
       db.SetMaxOpenConns(30)
       db.SetConnMaxLifetime(5 * time.Minute)

       // 注册模型
       orm.RegisterModel(new(User))

       // 自动建表（如果表不存在）
       err = orm.RunSyncdb("default", false, true)
       if err != nil {
           logs.Error("自动建表失败:", err)
           return
       }

       logs.Info("数据库初始化成功")
   }

   func main() {
       // 获取 orm 对象
       o := orm.NewOrm()

       // 插入数据
       user := &User{
           Username: "oceanbase_user",
           Email:    "******@oceanbase.com",
           Age:      28,
       }

       logs.Info("开始插入数据...")
       id, err := o.Insert(user)
       if err != nil {
           logs.Error("插入数据失败:", err)
           return
       }
       logs.Info(fmt.Sprintf("插入数据成功, ID: %d", id))

       // 查询数据
       readUser := &User{Id: int(id)}
       err = o.Read(readUser)
       if err != nil {
           logs.Error("查询数据失败:", err)
           return
       }
       logs.Info(fmt.Sprintf("查询数据成功: %+v", readUser))

       // 更新数据
       readUser.Age = 29
       readUser.Updated = time.Now()

       _, err = o.Update(readUser)
       if err != nil {
           logs.Error("更新数据失败:", err)
           return
       }
       logs.Info("更新数据成功")

       // 查询所有数据
       var users []*User
       _, err = o.QueryTable("users").All(&users)
       if err != nil {
           logs.Error("查询所有数据失败:", err)
           return
       }
       logs.Info(fmt.Sprintf("当前用户数: %d", len(users)))

       // 删除数据
       _, err = o.Delete(readUser)
       if err != nil {
           logs.Error("删除数据失败:", err)
           return
       }
       logs.Info("删除数据成功")
   }

   ```

### 步骤四：运行程序并验证结果

1. 运行程序：

   ```bash
   cd ~/go/src/beego-oceanbase
   go run main.go

   ```
 2. 如果遇到 `go: command not found` 错误，请确保已按照步骤二中的说明正确设置了 Go 环境变量。
 3. 程序执行完成后，您应该能看到类似以下的输出：

   ```bash
   create table `users`
   -- --------------------------------------------------
   --  Table Structure for `main.User`
   -- --------------------------------------------------
   CREATE TABLE IF NOT EXISTS `users` (
       `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
       `username` varchar(100) NOT NULL DEFAULT '' ,
       `email` varchar(100) NOT NULL DEFAULT ''  UNIQUE,
       `age` integer,
       `created` datetime NOT NULL,
       `updated` datetime
   ) ENGINE=INNODB;

   2025/06/10 11:08:42.497 [I] [main.go:67]  数据库初始化成功
   2025/06/10 11:08:42.497 [I] [main.go:81]  开始插入数据...
   2025/06/10 11:08:42.544 [I] [main.go:87]  插入数据成功, ID: 1
   2025/06/10 11:08:42.550 [I] [main.go:96]  查询数据成功: &{Id:1 Username:oceanbase_user Email:******@oceanbase.com Age:28 Created:2025-06-10 11:08:42 +0800 CST Updated:2025-06-10 11:08:42 +0800 CST}
   2025/06/10 11:08:42.553 [I] [main.go:107]  更新数据成功
   2025/06/10 11:08:42.554 [I] [main.go:116]  当前用户数: 1
   2025/06/10 11:08:42.556 [I] [main.go:124]  删除数据成功

   ```

## 相关文档

- [beego ORM 官方文档](https://beego.vip/docs/mvc/model/overview.md)
 - [OceanBase 数据库文档](https://www.oceanbase.com/docs/enterprise/oceanbase-database-cn)
 - [Go 语言官方文档](https://golang.org/doc/)
 - [MySQL 驱动文档](https://github.com/go-sql-driver/mysql)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
