github.com/astaxie/beego@v1.12.3/orm/README.md (about) 1 # beego orm 2 3 [](https://drone.io/github.com/astaxie/beego/latest) 4 5 A powerful orm framework for go. 6 7 It 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 15 Passed 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 26 more 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 44 package main 45 46 import ( 47 "fmt" 48 "github.com/astaxie/beego/orm" 49 _ "github.com/go-sql-driver/mysql" // import your used driver 50 ) 51 52 // Model Struct 53 type User struct { 54 Id int `orm:"auto"` 55 Name string `orm:"size(100)"` 56 } 57 58 func 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 69 func 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 93 type Post struct { 94 Id int `orm:"auto"` 95 Title string `orm:"size(100)"` 96 User *User `orm:"rel(fk)"` 97 } 98 99 var posts []*Post 100 qs := o.QueryTable("post") 101 num, err := qs.Filter("User__Name", "slene").All(&posts) 102 ``` 103 104 #### Use Raw sql 105 106 If you don't like ORM,use Raw SQL to query / mapping without ORM setting 107 108 ```go 109 var maps []Params 110 num, err := o.Raw("SELECT id FROM user WHERE name = ?", "slene").Values(&maps) 111 if num > 0 { 112 fmt.Println(maps[0]["id"]) 113 } 114 ``` 115 116 #### Transaction 117 118 ```go 119 o.Begin() 120 ... 121 user := User{Name: "slene"} 122 id, err := o.Insert(&user) 123 if err == nil { 124 o.Commit() 125 } else { 126 o.Rollback() 127 } 128 129 ``` 130 131 #### Debug Log Queries 132 133 In development env, you can simple use 134 135 ```go 136 func main() { 137 orm.Debug = true 138 ... 139 ``` 140 141 enable log queries. 142 143 output include all queries, such as exec / prepare / transaction. 144 145 like 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 152 note: not recommend use this in product env. 153 154 ## Docs 155 156 more details and examples in docs and test 157 158 [documents](http://beego.me/docs/mvc/model/overview.md) 159