• beego——原生SQL查询


    使用Raw SQL查询,无需使用ORM表定义。

    多数据库,都可直接使用占位符号?,自动转换。

    查询时的参数,支持使用Model Struct和Slice,Array

    ids := []int{1, 2, 3}
    p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids)

    创建一个RawSeter

    o := orm.NewOrm()
    var r RawSeter
    r = o.Raw("UPDATE user SET name = ? WHERE name = ?", "testing", "slene")

    RawSeter接口中所包含的方法:

    type RawSeter interface {

    • Exec() (sql.Result, error)
    • QueryRow(…interface{}) error
    • QueryRows(…interface{}) (int64, error)
    • SetArgs(…interface{}) RawSeter
    • Values(*[]Params, …string) (int64, error)
    • ValuesList(*[]ParamsList, …string) (int64, error)
    • ValuesFlat(*ParamsList, string) (int64, error)
    • RowsToMap(*Params, string, string) (int64, error)
    • RowsToStruct(interface{}, string, string) (int64, error)
    • Prepare() (RawPreparer, error)

    }

    Exec

    执行sql语句,返回sql.Result对象

    res, err := o.Raw("UPDATE user SET name = ?", "your").Exec()
    if err == nil {
        num, _ := res.RowsAffected()
        fmt.Println("mysql row affected nums: ", num)
    }
    

      

    QueryRow

    QueryRow和QueryRows提供高级sql mapper功能。

    支持struct

    type User struct {
        Id       int
        UserName string
    }
    
    var user User
    err := o.Raw("SELECT id, user_name FROM user WHERE id = ?", 1).QueryRow(&user)
    

      

    QueryRows

    QueryRows支持的对象还有map规则和QueryRow一样,但都是slice

    type User struct {
        Id       int
        UserName string
    }
    
    var users []User
    num, err := o.Raw("SELECT id, user_name FROM user WHERE id = ?", 1).QueryRows(&users)
    if err == nil {
        fmt.Println("user nums: ", num)
    }
    

      

    SetArgs

    改变Raw(sql,args)中的args参数,返回一个新的RawSeter。

    用于单条sql语句,重复利用,替换参数然后执行。

    res, err := r.SetArgs("arg1", "arg2").Exec()
    res, err := r.SetArgs("arg1", "arg2").Exec()
    ...
    

      

    Values / ValuesList / ValuesFlat

    Raw SQL查询获得的结果集Value为string类型,NULL字段的值为空。

    Values

    以键值对的方式返回结果集

    var maps []orm.Params
    num, err := o.Raw("SELECT user_name FROM user WHERE status = ?", 1).Values(&maps)
    if err == nil && num > 0 {
        fmt.Println(maps[0]["user_name"]) // slene
    }

    valuesList

    返回结果集slice

    var lists []orm.ParamsList
    num, err := o.Raw("SELECT user_name FROM user WHERE status = ?", 1).ValuesList(&lists)
    if err == nil && num > 0 {
        fmt.Println(lists[0][0]) // slene
    }

    ValuesFlat

    返回单一字段的平铺slice数据。

    var list orm.ParamsList
    num, err := o.Raw("SELECT id FROM user WHERE id < ?", 10).ValuesFlat(&list)
    if err == nil && num > 0 {
        fmt.Println(list) // []{"1","2","3",...}
    }
    

      

    RowsToMap

    查询结果匹配到map里

    res := make(orm.Params)
    nums, err := o.Raw("SELECT name, value FROM options_table").RowsToMap(&res, "name", "value")
    // res is a map[string]interface{}{
    //  "total": 100,
    //  "found": 200,
    // }
    

      

    RowsToStruct

    type Options struct {
        Total int
        Found int
    }
    
    res := new(Options)
    nums, err := o.Raw("SELECT name, value FROM options_table").RowsToStruct(res, "name", "value")
    fmt.Println(res.Total) // 100
    fmt.Println(res.Found) // 200
    

      

    Prepare

    用于一次prepare多次exec,以提高批量执行的速度。

    p, err := o.Raw("UPDATE user SET name = ? WHERE name = ?").Prepare()
    res, err := p.Exec("testing", "slene")
    res, err  = p.Exec("testing", "astaxie")
    ...
    ...
    p.Close() // 别忘记关闭 statement
    

      

  • 相关阅读:
    hdu 3666 差分约束系统
    hdu 1198农田灌溉
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    高等微積分(高木貞治) 1.4節 例2
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    解析函數論 Page 29 命題(2) 函數模的有界性
    高等微積分(高木貞治) 1.4節 例2
    解析函數論 Page 29 命題(1) 有界閉集上的一致連續性
    解析函數論 Page 29 命題(3) 模的下界的可達性
    解析函數論 Page 29 命題(2) 函數模的有界性
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/10125588.html
Copyright © 2020-2023  润新知