Improve this page on GitHub

Models - Beego ORM

Build Status Go Walker

Beego ORM is a powerful ORM framework written in Go. It is inspired by Django ORM and SQLAlchemy.

This framework is still under development so compatibility is not guaranteed.

Supported Database:

All of the database drivers have passed the tests. But we still need your feedback and bug reports.

ORM Features:

  • Supports all the types in Go
  • The CRUD is easy to use.
  • Auto Join connection tables.
  • Compatible with crossing database queries.
  • Supports raw SQL query and mapping
  • Strict and well covered test cases ensure the ORM’s stability.

You can learn more in the document.

Install ORM:

go get github.com/astaxie/beego/orm

Change log

Quickstart

Demo

package main

import (
    "fmt"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql" // import your required driver
)

// Model Struct
type User struct {
    Id   int
    Name string `orm:"size(100)"`
}

func init() {
    // register model
    orm.RegisterModel(new(User))

    // set default database
    orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30)
}

func main() {
    o := orm.NewOrm()

    user := User{Name: "slene"}

    // insert
    id, err := o.Insert(&user)
    fmt.Printf("ID: %d, ERR: %v\n", id, err)

    // update
    user.Name = "astaxie"
    num, err := o.Update(&user)
    fmt.Printf("NUM: %d, ERR: %v\n", num, err)

    // read one
    u := User{Id: user.Id}
    err = o.Read(&u)
    fmt.Printf("ERR: %v\n", err)

    // delete
    num, err = o.Delete(&u)
    fmt.Printf("NUM: %d, ERR: %v\n", num, err)
}

Relation Query

type Post struct {
    Id    int    `orm:"auto"`
    Title string `orm:"size(100)"`
    User  *User  `orm:"rel(fk)"`
}

var posts []*Post
qs := o.QueryTable("post")
num, err := qs.Filter("User__Name", "slene").All(&posts)

Raw SQL query

You can always use raw SQL to query and mapping.

var maps []Params
num, err := o.Raw("SELECT id FROM user WHERE name = ?", "slene").Values(&maps)
if num > 0 {
    fmt.Println(maps[0]["id"])
}

Transactions

o.Begin()
...
user := User{Name: "slene"}
id, err := o.Insert(&user)
if err == nil {
    o.Commit()
} else {
    o.Rollback()
}

Debugging query log

In development environment, you can enable debug mode by:

func main() {
    orm.Debug = true
...

It will output every query statement including execution, preparation and transactions.

For example:

[ORM] - 2013-08-09 13:18:16 - [Queries/default] - [    db.Exec /     0.4ms] -   [INSERT INTO `user` (`name`) VALUES (?)] - `slene`
...

Notes: It is not recommended to enable debug mode in a production environment.

Index

  1. Orm Usage
  2. CRUD of Object
  3. Advanced Queries
  4. Use Raw SQL
  5. Transactions
  6. Model Definition
  7. Command Line
  8. Test ORM
  9. Custom Fields
  10. FAQ
comments powered by Disqus