2019-go-03

基本使用

1
2
3
4
5
6
7
//创建Orm对象
o := orm.NewOrm()
// 获取 QuerySeter 对象,user 为表名
qs := o.QueryTable("user")
// 也可以直接使用对象作为表名
user := new(User)
qs = o.QueryTable(user) // 返回 QuerySeter

复杂一些的

1
2
3
4
5
6
7
8
9
10

qs.Filter("id", 1) // WHERE id = 1
qs.Filter("user__id",1) //where user.id =1
qs.Filter("id_in",10,20) //where age in(10,20)
qs.Filter("id__gte",18) //where id>=18
qs.Filter("id__gt",18) //where id>18
qs.Filter("id__,5) //where id<5
//gt 是greater缩写即大于
//get是 Greater or equal的缩写即大于等于
//lt 是less than 即小于

具体的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

exact  ->  =
iexact -> like'
in -> in 
gt  ->  > 
gte-> >=
lt ->  <
lte ->  <=
contains ->  like BINARY '%xxx%' (区分大小写)
icontains -> like '%xxx%' (不区分大小写)
startswith -> LIKE BINARY 'xxx%' (区分大小写)
istartswith -> LIKE  'xxx%'
endswith -> LIKE BINARY '%xxx' (区分大小写)
iendswith -> LIKE  '%xxx'
isnull -> is not null
1
2
3
4
5
6
7
8
9
10

qs.Filter("id", 1) // WHERE id = 1
qs.Filter("user__id",1) //where user.id =1
qs.Filter("_id_in",10,20) //where age in(10,20)
qs.Filter("__id__gte",18) //where id>=18
qs.Filter("__id__gt",18) //where id>18
qs.Filter("__id__,5) //where id<5
//gt 是greater缩写即大于
//get是 Greater or equal的缩写即大于等于
//lt 是less than 即小于
1
2
3
4
5
6
7
8
9
10
11
12
var DefaultRelsDepth = 5 // 默认情况下直接调用 RelatedSel 将进行最大 5 层的关系查询

qs := o.QueryTable("post")

qs.RelatedSel()
// INNER JOIN user ... LEFT OUTER JOIN profile ...

qs.RelatedSel("user")
// INNER JOIN user ...
// 设置 expr 只对设置的字段进行关系查询

// 对设置 null 属性的 Field 将使用 LEFT OUTER JOIN
1
2
3
4
5
6

num, err := o.QueryTable("user").Filter("name", "slene").Update(orm.Params{
"name": "astaxie",
})
fmt.Printf("Affected Num: %s, %s", num, err)
// SET name = "astaixe" WHERE name = "slene"
1
2
3
var users []*User
num, err := o.QueryTable("user").Filter("name", "slene").All(&users)
fmt.Printf("Returned Rows Num: %s, %s", num, err)

受到limit限制 默认最大行数为1000