数据库设置与注册

Beego ORM 要求显式注册数据库的信息,而后才可以自由使用。

当然,永远不要忘了匿名引入驱动:

  1. import (
  2. _ "github.com/go-sql-driver/mysql"
  3. _ "github.com/lib/pq"
  4. _ "github.com/mattn/go-sqlite3"
  5. )

上面三种,你根据自己需要引入一种就可以。

最简单的例子:

  1. // 参数1 数据库的别名,用来在 ORM 中切换数据库使用
  2. // 参数2 driverName
  3. // 参数3 对应的链接字符串
  4. orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")
  5. // 参数4(可选) 设置最大空闲连接
  6. // 参数5(可选) 设置最大数据库连接 (go >= 1.2)
  7. maxIdle := 30
  8. maxConn := 30
  9. orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", orm.MaxIdleConnections(maxIdle), orm.MaxOpenConnections(maxConn))

ORM 要求必须要注册一个default的数据库。并且,Beego 的 ORM 并没有自己管理连接,而是直接依赖于驱动。

数据库设置

最大连接数

最大连接数的设置有两种方式,一种方式是在注册数据库的时候,使用MaxOpenConnections 选项:

  1. orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", orm.MaxOpenConnections(100))

也可以在注册之后修改:

  1. orm.SetMaxOpenConns("default", 30)

最大空闲连接数

最大空闲连接数的设置有两种方式,一种方式是在注册数据库的时候,使用MaxIdleConnections选项:

  1. orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", orm.MaxIdleConnections(20))

时区

ORM 默认使用 time.Local 本地时区

  • 作用于 ORM 自动创建的时间
  • 从数据库中取回的时间转换成 ORM 本地时间

如果需要的话,你也可以进行更改

  1. // 设置为 UTC 时间
  2. orm.DefaultTimeLoc = time.UTC

ORM 在进行 RegisterDataBase 的同时,会获取数据库使用的时区,然后在 time.Time 类型存取时做相应转换,以匹配时间系统,从而保证时间不会出错。

注意:

  • 鉴于 Sqlite3 的设计,存取默认都为 UTC 时间
  • 使用 go-sql-driver 驱动时,请注意参数设置 从某一版本开始,驱动默认使用 UTC 时间,而非本地时间,所以请指定时区参数或者全部以 UTC 时间存取 例如:root:root@/orm_test?charset=utf8&loc=Asia%2FShanghai 参见 loc / parseTime

注册驱动

大多数时候,你只需要使用默认的那些驱动,有:

  1. DRMySQL // mysql
  2. DRSqlite // sqlite
  3. DROracle // oracle
  4. DRPostgres // pgsql
  5. DRTiDB // TiDB

如果你需要注册自定义的驱动,可以使用:

  1. // 参数1 driverName
  2. // 参数2 数据库类型
  3. // 这个用来设置 driverName 对应的数据库类型
  4. // mysql / sqlite3 / postgres / tidb 这几种是默认已经注册过的,所以可以无需设置
  5. orm.RegisterDriver("mysql", yourDriver)