1.查询
1).简单查询
2).尝试从数据库读取,不存在的话就创建一个
func selectSql () {
o := orm.NewOrm()
o.Using("default")
user := models.User{Username: "新建用户"}
// 三个返回参数依次为:是否新创建的,对象 Id 值,错误
if created, _, err := o.ReadOrCreate(&user, "Username"); err == nil {
if created {
fmt.Println("新建user:%+v",user)
} else {
fmt.Println("查询user:%+v",user)
}
}
}
2.新增
1).单个新增
func insertSql () {
o := orm.NewOrm()
o.Using("default")
user := models.User{Username: "新增用户",Password:"4455556"}
id, err := o.Insert(&user)
if err == nil {
fmt.Println(id)
fmt.Println("新建user:%+v",user)
}
}
2).批量新增
func insertSql () {
o := orm.NewOrm()
o.Using("default")
user := []models.User{
{Username: "批量新增用户1",Password:"4455556"},
{Username: "批量新增用户2",Password:"4455556"},
}
//第一个参数 为并列插入的数量,第二个为对象的slice
id, err := o.InsertMulti(2,&user)
if err == nil {
fmt.Println(id)
fmt.Println("新建user:%+v",user)
}
}
3.修改
func updateSql () {
o := orm.NewOrm()
o.Using("default")
user := models.User{Id:16}
user.Password="12345"
// 只更新这些字段
// o.Update(&user, "Field1", "Field2", ...)
if num, err := o.Update(&user); err == nil {
fmt.Println(num)
}
}
4.删除
func deleteSql () {
o := orm.NewOrm()
o.Using("default")
user := models.User{Id:16}
if num, err := o.Delete(&user); err == nil {
fmt.Println(num)
}
}
5.高级操作(以 QuerySeter 来操作数据库)
1).部分示例
o := orm.NewOrm()
//default可以省略
o.Using("default")
// 可以直接使用对象作为表名
qs := o.QueryTable(new(models.User)) // 返回 QuerySeter
//或者利用表查询t_user是表名
// qs :=o.QueryTable("t_user")
//expr
qs.Filter("id", 1) // WHERE id = 1
qs.Filter("id_lt", 12) // WHERE id <12
qs.Filter("id_gte", 12) // WHERE id >=12
qs.Filter("id_in", 12,14) // WHERE id in (12,14)
//iexact
qs.Filter("username__iexact", "大旺") // WHERE username LIKE '大旺'
//contains 大小写敏感
qs.Filter("username__contains", "大旺") // WHERE username LIKE BINARY '%大旺%'
//icontains 大小写不敏感
qs.Filter("username__icontains", "大旺") // WHERE username LIKE '%大旺%'
// isnull
qs.Filter("username__isnull", true) // WHERE username is NUll
//limit 10
qs.Limit(10)
//no limit
qs.Limit(-1)
// LIMIT 10 OFFSET 20 注意跟 SQL 反过来的
qs.Limit(10, 20)
//group by usernmae,age
qs.GroupBy("username", "age")
//order by id asc age desc
qs.OrderBy("id", "-age")
2).按条件查询批量更新
func selectSql() {
o := orm.NewOrm()
//default可以省略
o.Using("default")
num, err := o.QueryTable(new(models.User)).Filter("username", "大旺").Update(orm.Params{
"username": "大兴",
})
fmt.Printf("Affected Num: %s, %s", num, err)
}
3).用于一次 prepare 多次 insert 插入,以提高批量插入的速度
func insertSql() {
o := orm.NewOrm()
//default可以省略
o.Using("default")
insert, _ := o.QueryTable(new(models.User)).PrepareInsert()
users := []models.User{
{Username: "test1", Password: "123456"},
{Username: "test2", Password: "123456"},
}
for _, user := range users {
_, err := insert.Insert(&user)
if err != nil {
println(err)
}
}
//关闭 statement
insert.Close()
}
4).根据条件查询所有和单个
o := orm.NewOrm()
//default可以省略
o.Using("default")
//查询所有
users := []models.User{}
num, err := o.QueryTable(new(models.User)).Filter("username", "大兴").All(&users)
fmt.Printf("Num err: %s, %s \n", num, err)
fmt.Printf("user %+v \n", users)
//查询单个
user := models.User{}
o.QueryTable(new(models.User)).Filter("username", "大兴").One(&user)
fmt.Printf("user %+v \n", user)
6.原生sql查询
o := orm.NewOrm()
//default可以省略
o.Using("default")
user:=new(models.User)
err := o.Raw("SELECT * FROM t_user WHERE username = ?", "大兴").QueryRow(&user)
if err == nil {
fmt.Printf("user:%+v \n",user)
}
o := orm.NewOrm()
//default可以省略
o.Using("default")
users:=new([]models.User)
_,err := o.Raw("SELECT * FROM t_user WHERE username = ?", "大兴").QueryRows(users)
if err == nil {
fmt.Printf("user:%+v \n",users)
}