# Register database

Beego ORM requires explicit registration of database information before it can be freely used.

And of course, never forget the anonymous introduction of the driver:

import (
	_ "github.com/go-sql-driver/mysql"
	_ "github.com/lib/pq"
	_ "github.com/mattn/go-sqlite3"
)

From three drivers imported above, you can introduce one according to your needs.

Example:

// args[0]        Alias of the database, used to switch the database in ORM
// args[1]        driverName
// args[2]        DSN
orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")

// args[3](optional)  max number of idle connections
// args[4](optional)  max number of connections (go >= 1.2)
maxIdle := 30
maxConn := 30
orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", orm.MaxIdleConnections(maxIdle), orm.MaxOpenConnections(maxConn))

ORM requires a default database to be registered. And Beego's ORM does not manage connections itself, but relies directly on the driver.

# Configuration

# Max number of connections

There are two ways to set the maximum number of open connections. One way is to use the MaxOpenConnections option when registering the database:

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

Second way is to modify maximum number of open connections after registration:

orm.SetMaxOpenConns("default", 30)

# Max number of idle connections

There are two ways to set the maximum number of idle connections. One way is to use the MaxIdleConnections option when registering the database:

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

Second way is to modify maximum number of idle connections after registration:

orm.SetMaxIdleConns("default", 30)

# Time zone

ORM uses time.Local as default time zone, and you can modify it by:

// Set UTC Time
orm.DefaultTimeLoc = time.UTC

ORM will get the time zone used by the database while doing RegisterDataBase and then do the corresponding conversion when accessing the time.Time type to match the time system. That operation will ensure that the time will not be wrong.

Notice:

  • Given the design of SQLite3, accesses default to UTC time

  • When using the go-sql-driver driver, please pay attention to the configuration. From a certain version, the driver uses UTC time by default instead of local time, so please specify the time zone parameter or access it in UTC time:

    For example: root:root@/orm_test?charset=utf8&loc=Asia%2FShanghai

    For more details, please refer to loc (opens new window) / parseTime (opens new window).

# Driver

Most of the time, you only need to use the default ones for drivers that have:

	DRMySQL                      // mysql
	DRSqlite                     // sqlite
	DROracle                     // oracle
	DRPostgres                   // pgsql
	DRTiDB                       // TiDB

If you need to register a custom driver, you can use:

// args[0]   driverName
// args[1]   driver implementation
// mysql / sqlite3 / postgres / tidb were registered automatically
orm.RegisterDriver("mysql", yourDriver)