o := orm.NewOrm()
1. 直接使用對象作為表名
user := new(User)
qs = o.QueryTable(user) // 返回 QuerySeter
2. FILTER
qs.Filter("id", 1) // WHERE id = 1
qs.Filter("profile__isnull", true).Filter("name", "slene")
3. LIMIT
qs.Limit(10)
// LIMIT 10
qs.Limit(10, 20)
// LIMIT 10 OFFSET 20 注意跟 SQL 反過來的
此功能可用于分頁:
num, err := o.QueryTable("store").Limit(2, 2*3).Values(&maps)
每頁(limit)兩個铭乾,獲取第四頁內(nèi)容(偏移了2*3頁)
qs.Limit(-1)
// no limit
4. GROUPBY
qs.GroupBy("id", "age")
// GROUP BY id,age
5. ORDERBY
qs.OrderBy("id", "-profile__age")
// ORDER BY id ASC, profile.age DESC
6. DISTINCT
qs.Distinct()
// SELECT DISTINCT
7. COUNT
cnt, err := o.QueryTable("user").Count() // SELECT COUNT(*) FROM USER
8. EXIST
exist := o.QueryTable("user").Filter("UserName", "Name").Exist()
9. UPDATE
依據(jù)當前查詢條件春缕,進行批量更新操作
num, err := o.QueryTable("user").Filter("name", "slene").Update(orm.Params{"name": "astaxie",})
原子操作增加字段值
// 假設(shè) user struct 里有一個 nums int 字段
num, err := o.QueryTable("user").Update(orm.Params{
"nums": orm.ColValue(orm.ColAdd, 100),
})
// SET nums = nums + 100
ColAdd // 加
ColMinus // 減
ColMultiply // 乘
ColExcept // 除
10. DELETE
依據(jù)當前查詢條件笆搓,進行批量刪除操作
num, err := o.QueryTable("user").Filter("name", "slene").Delete()
fmt.Printf("Affected Num: %s, %s", num, err)
// DELETE FROM user WHERE name = "slene"
11. PREPAREINSERT
用于一次 prepare 多次 insert 插入趣竣,以提高批量插入的速度
var users []*User
...
qs := o.QueryTable("user")
i, _ := qs.PrepareInsert()
for _, user := range users {
id, err := i.Insert(user)
if err == nil {
...
}
}
// PREPARE INSERT INTO user (`name`, ...) VALUES (?, ...)
// EXECUTE INSERT INTO user (`name`, ...) VALUES ("slene", ...)
// EXECUTE ...
// ...
i.Close() // 別忘記關(guān)閉 statement
12. ALL
返回對應(yīng)的結(jié)果集對象
All 的參數(shù)支持 *[]Type 和 *[]*Type 兩種形式的 slice
var users []*User
num, err := o.QueryTable("user").Filter("name", "slene").All(&users)
All / Values / ValuesList / ValuesFlat 受到 Limit 的限制,默認最大行數(shù)為 1000
可以指定返回的字段:
type Post struct {
Id int
Title string
Content string
Status int
}
// 只返回 Id 和 Title
var posts []Post
o.QueryTable("post").Filter("Status", 1).All(&posts, "Id", "Title")
對象的其他字段值將會是對應(yīng)類型的默認值
13. ONE
嘗試返回單條記錄
var user User
err := o.QueryTable("user").Filter("name", "slene").One(&user)
if err == orm.ErrMultiRows {
// 多條的時候報錯
fmt.Printf("Returned Multi Rows Not One")
}
if err == orm.ErrNoRows {
// 沒有找到記錄
fmt.Printf("Not row found")
}
可以指定返回的字段:
// 只返回 Id 和 Title
var post Post
o.QueryTable("post").Filter("Content__istartswith", "prefix string").One(&post, "Id", "Title")
14. VALUES
返回結(jié)果集的 key => value 值
key 為 Model 里的 Field name,value 的值 以 string 保存
var maps []orm.Params
num, err := o.QueryTable("user").Values(&maps)
if err == nil {
fmt.Printf("Result Nums: %d\n", num)
for _, m := range maps {
fmt.Println(m["Id"], m["Name"])
}
}
15. VALUESLIST
返回的每個元素值以 string 保存
var lists []orm.ParamsList
num, err := o.QueryTable("user").ValuesList(&lists)
if err == nil {
fmt.Printf("Result Nums: %d\n", num)
for _, row := range lists {
fmt.Println(row)
}
}
當然也可以指定 expr 返回指定的 Field
var lists []orm.ParamsList
num, err := o.QueryTable("user").ValuesList(&lists, "name", "profile__age")
if err == nil {
fmt.Printf("Result Nums: %d\n", num)
for _, row := range lists {
fmt.Printf("Name: %s, Age: %s\m", row[0], row[1])
}
}
16. VALUESFLAT
只返回特定的 Field 值,將結(jié)果集展開到單個 slice 里
var list orm.ParamsList
num, err := o.QueryTable("user").ValuesFlat(&list, "name")
if err == nil {
fmt.Printf("Result Nums: %d\n", num)
fmt.Printf("All User Names: %s", strings.Join(list, ", "))
}
ORM CURD
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門歌焦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砚哆,你說我怎么就攤上這事独撇。” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵纷铣,是天一觀的道長卵史。 經(jīng)常有香客問我,道長搜立,這世上最難降的妖魔是什么以躯? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮啄踊,結(jié)果婚禮上忧设,老公的妹妹穿的比我還像新娘。我一直安慰自己颠通,他們只是感情好址晕,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顿锰,像睡著了一般斩箫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撵儿,一...
- 文/蒼蘭香墨 我猛地睜開眼缀匕,長吁一口氣:“原來是場噩夢啊……” “哼纳决!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乡小,我...
- 正文 年R本政府宣布题禀,位于F島的核電站,受9級特大地震影響琢岩,放射性物質(zhì)發(fā)生泄漏投剥。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一担孔、第九天 我趴在偏房一處隱蔽的房頂上張望江锨。 院中可真熱鬧,春花似錦糕篇、人聲如沸啄育。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽挑豌。三九已至,卻和暖如春墩崩,著一層夾襖步出監(jiān)牢的瞬間氓英,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- beego orm是一個基于Go進行ORM操作的庫吹害,它采用了Go style方式對數(shù)據(jù)庫進行操作,實現(xiàn)了struc...
- 簡介 sqlalchemy 可以直接通過已存在數(shù)據(jù)庫表直接自動生成映射表的創(chuàng)建和關(guān)系使用可視化工具進行創(chuàng)建虚青,如ms...
- 對象關(guān)系映射(Object Relational Mapping挟憔,簡稱ORM钟些,翻譯為中文為模型關(guān)系映射或者對象關(guān)系...
- pandas 作為數(shù)據(jù)分析處理的強大工具,不僅具有幾乎所有 sql 語句所能擁有的功能绊谭,如:join政恍、group ...