《go web 编程》第四章 访问数据库:使用 Beego or
beego orm 是一个 Go 进行 ORM 操作的库,它采用了 Go style 方式对数据库进行操作,实现了 struct 到数据表记录的映射。beego orm 是一个十分轻量级的 Go ORM 框架,开发这个库的本意降低复杂的 ORM 学习曲线,尽可能在 ORM 的运行效率和功能之间寻求一个平衡,beego orm 是目前开源的 Go ORM 框架中实现比较完整的一个库,而且运行效率相当不错,功能也基本能满足需求。
beego orm 是支持 database/sql 标准接口的 ORM 库,所以理论上来说,只要数据库驱动支持 database/sql 接口就可以无缝的接入 beego orm。目前测试过的驱动包括下面几个:
Mysql: github/go-mysql-driver/mysql
PostgreSQL: github.com/lib/pq
SQLite: github.com/mattn/go-sqlite3
Mysql: github.com/ziutek/mymysql/godrv
暂未支持数据库:
MsSql: github.com/denisenkom/go-mssqldb
MS ADODB: github.com/mattn/go-adodb
Oracle: github.com/mattn/go-oci8
ODBC: bitbucket.org/miquella/mgodbc
安装
beego orm 支持 go get 方式安装,是完全按照 Go Style 的方式来实现的。
image.png
如何初始化
首先你需要 import 相应的数据库驱动包、database/sql 标准接口包以及 beego orm 包,如下所示:
image.png
PostgreSQL 配置:
// _ "github.com/lib/pq"
// 注册驱动
orm.RegisterDriver("postgres", orm.DR_Postgres)
// 设置默认数据库
// PostgresQL用户:postgres ,密码:zxxx , 数据库名称:test , 数据库别名:default
orm.RegisterDataBase("default", "postgres", "user=postgres password=zxxx dbname=test host=127.0.0.1 port=5432 sslmode=disable")
MySQL 配置:
// _ "github.com/go-sql-driver/mysql"
// 注册驱动
orm.RegisterDriver("mysql", orm.DR_MySQL)
// 设置默认数据库
//mysql用户:root ,密码:zxxx , 数据库名称:test , 数据库别名:default
orm.RegisterDataBase("default", "mysql", "root:zxxx@/test?charset=utf8")
Sqlite 配置:
// _ "github.com/mattn/go-sqlite3"
// 注册驱动
orm.RegisterDriver("sqlite", orm.DR_Sqlite)
// 设置默认数据库
// 数据库存放位置:./datas/test.db , 数据库别名:default
orm.RegisterDataBase("default", "sqlite3", "./datas/test.db")
导入必须的 package 之后,我们需要打开到数据库的链接,然后创建一个 beego orm 对象(以 MySQL 为例),如下所示
beego orm:
func main() {
o := orm.NewOrm()
}
简单示例:
package main
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql" // 导入数据库驱动
)
// Model Struct
type User struct {
Id int
Name string `orm:"size(100)"`
}
func init() {
// 设置默认数据库
orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30)
// 注册定义的 model
orm.RegisterModel(new(User))
// RegisterModel 也可以同时注册多个 model
// orm.RegisterModel(new(User), new(Profile), new(Post))
// 创建 table
orm.RunSyncdb("default", false, true)
}
func main() {
o := orm.NewOrm()
user := User{Name: "slene"}
// 插入表
id, err := o.Insert(&user)
fmt.Printf("ID: %d, ERR: %v\n", id, err)
// 更新表
user.Name = "astaxie"
num, err := o.Update(&user)
fmt.Printf("NUM: %d, ERR: %v\n", num, err)
// 读取 one
u := User{Id: user.Id}
err = o.Read(&u)
fmt.Printf("ERR: %v\n", err)
// 删除表
num, err = o.Delete(&u)
fmt.Printf("NUM: %d, ERR: %v\n", num, err)
}