1# beego orm 2 3[![Build Status](https://drone.io/github.com/astaxie/beego/status.png)](https://drone.io/github.com/astaxie/beego/latest) 4 5A powerful orm framework for go. 6 7It is heavily influenced by Django ORM, SQLAlchemy. 8 9**Support Database:** 10 11* MySQL: [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) 12* PostgreSQL: [github.com/lib/pq](https://github.com/lib/pq) 13* Sqlite3: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) 14 15Passed all test, but need more feedback. 16 17**Features:** 18 19* full go type support 20* easy for usage, simple CRUD operation 21* auto join with relation table 22* cross DataBase compatible query 23* Raw SQL query / mapper without orm model 24* full test keep stable and strong 25 26more features please read the docs 27 28**Install:** 29 30 go get github.com/astaxie/beego/orm 31 32## Changelog 33 34* 2013-08-19: support table auto create 35* 2013-08-13: update test for database types 36* 2013-08-13: go type support, such as int8, uint8, byte, rune 37* 2013-08-13: date / datetime timezone support very well 38 39## Quick Start 40 41#### Simple Usage 42 43```go 44package main 45 46import ( 47 "fmt" 48 "github.com/astaxie/beego/orm" 49 _ "github.com/go-sql-driver/mysql" // import your used driver 50) 51 52// Model Struct 53type User struct { 54 Id int `orm:"auto"` 55 Name string `orm:"size(100)"` 56} 57 58func init() { 59 // register model 60 orm.RegisterModel(new(User)) 61 62 // set default database 63 orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30) 64 65 // create table 66 orm.RunSyncdb("default", false, true) 67} 68 69func main() { 70 o := orm.NewOrm() 71 72 user := User{Name: "slene"} 73 74 // insert 75 id, err := o.Insert(&user) 76 77 // update 78 user.Name = "astaxie" 79 num, err := o.Update(&user) 80 81 // read one 82 u := User{Id: user.Id} 83 err = o.Read(&u) 84 85 // delete 86 num, err = o.Delete(&u) 87} 88``` 89 90#### Next with relation 91 92```go 93type Post struct { 94 Id int `orm:"auto"` 95 Title string `orm:"size(100)"` 96 User *User `orm:"rel(fk)"` 97} 98 99var posts []*Post 100qs := o.QueryTable("post") 101num, err := qs.Filter("User__Name", "slene").All(&posts) 102``` 103 104#### Use Raw sql 105 106If you don't like ORM,use Raw SQL to query / mapping without ORM setting 107 108```go 109var maps []Params 110num, err := o.Raw("SELECT id FROM user WHERE name = ?", "slene").Values(&maps) 111if num > 0 { 112 fmt.Println(maps[0]["id"]) 113} 114``` 115 116#### Transaction 117 118```go 119o.Begin() 120... 121user := User{Name: "slene"} 122id, err := o.Insert(&user) 123if err == nil { 124 o.Commit() 125} else { 126 o.Rollback() 127} 128 129``` 130 131#### Debug Log Queries 132 133In development env, you can simple use 134 135```go 136func main() { 137 orm.Debug = true 138... 139``` 140 141enable log queries. 142 143output include all queries, such as exec / prepare / transaction. 144 145like this: 146 147```go 148[ORM] - 2013-08-09 13:18:16 - [Queries/default] - [ db.Exec / 0.4ms] - [INSERT INTO `user` (`name`) VALUES (?)] - `slene` 149... 150``` 151 152note: not recommend use this in product env. 153 154## Docs 155 156more details and examples in docs and test 157 158[documents](http://beego.me/docs/mvc/model/overview.md) 159 160