基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
beego ORM 连接 OceanBase 数据库示例程序
更新时间:2026-04-09 14:12:04
功能适用性
beego ORM 适用于 OceanBase 数据库 MySQL 模式。
beego ORM 是一个强大的 Go 语言 ORM 框架,专为 Go 应用程序设计。它具有以下特点:
- 支持完整的 ORM 功能,包括模型定义、CRUD 操作和关联关系
- 支持 MySQL、PostgreSQL、SQLite 等主流数据库
- 提供自动建表、事务处理等高级功能
- 与 beego 框架完美集成,同时也可以独立使用
本文将介绍如何使用 beego ORM 连接 OceanBase 数据库,实现基本的数据库操作,包括创建表、插入数据、更新数据和查询数据等。
前提条件
- 您已安装 Go 1.13 或更高版本。
- 您已安装 OceanBase 数据库并且创建了 MySQL 模式租户。
- 您已获取 OceanBase 数据库连接串。
操作步骤
- 获取 OceanBase 数据库连接串。
- 安装 beego ORM 和 MySQL 驱动。
- 编写
main.go文件,实现数据库操作。 - 运行程序并验证结果。
步骤一:获取 OceanBase 数据库连接串
联系 OceanBase 数据库部署人员或者管理员获取相应的数据库连接串。
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 模式下的权限分类。$user_name:提供租户的连接账户。ODP 连接的常用格式:用户名@租户名#集群名或者集群名:租户名:用户名;直连方式格式:用户名@租户名。$password:提供账户密码。
更多连接串的信息,请参见 通过 OBClient 连接 OceanBase 租户。
示例如下:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
步骤二:安装 Go 语言和 beego ORM
若您已经安装了 Go 语言和 beego ORM,可以直接跳过此步骤。若您未安装,可根据以下步骤进行安装。
安装 Go 语言
更新系统包并安装必要的依赖:
sudo apt update sudo apt install -y wget下载并安装 Go 语言:
# 下载最新版本的 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配置环境变量:
# 编辑 ~/.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验证安装:
go version如果安装成功,将显示类似以下内容:
go version go1.20.6 linux/amd64
安装 beego ORM 和 MySQL 驱动
创建工作目录并初始化 Go 模块:
mkdir -p ~/go/src/beego-oceanbase cd ~/go/src/beego-oceanbase go mod init beego-oceanbase安装 beego ORM 和 MySQL 驱动:
go get -u github.com/beego/beego/v2 go get -u github.com/go-sql-driver/mysql(可选)如果由于网络原因无法直接安装,可以设置 Go 代理:
go env -w GOPROXY=https://goproxy.cn,direct然后重新执行安装命令。
验证安装:
go list -m github.com/beego/beego/v2 go list -m github.com/go-sql-driver/mysql如果安装成功,将显示相应的版本信息。
步骤三:编写 main.go 文件实现数据库操作
创建一个名为
main.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("删除数据成功") }
步骤四:运行程序并验证结果
运行程序:
cd ~/go/src/beego-oceanbase go run main.go如果遇到
go: command not found错误,请确保已按照步骤二中的说明正确设置了 Go 环境变量。程序执行完成后,您应该能看到类似以下的输出:
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] 删除数据成功