[beego]feat: 是否增加一个查询字段信息输出的方法.

2024-07-19 845 views
3

在动态数据库查询时往往需要输出的字段时,这些字段是根据语句自动输出出的,当前的办法是 sql :="select id,name from tbusers where id=0" db, err := orm.GetDB("default") if err != nil { beego.Debug(err) } rows, := db.Query(sql) if err != nil { beego.Debug(err) } defer rows.Close()

cols, err := rows.Columns() //取字段名
if err != nil {
    beego.Debug(err)
}
beego.Debug(cols)
col_types, err := rows.ColumnTypes() //取字段类型.
if err != nil {
    beego.Debug(err)
}
for _, v := range col_types {
    l, _ := v.Length()
    beego.Debug(v.ScanType())
    beego.Debug(v.Name(), v.DatabaseTypeName(), l)
}

能不能将输出的字段列表直接内置到orm类里,如增加一个类似 rows,cols,err := orm.Raw(sql).QueryRowsAndCols()
可以取数据也可不取数据. 非常感谢!!!!

回答

9

为何我没看懂?你这是什么场景?

6

感谢回复,一般应用于自定义sql/自定义报表,不可能所有结构预定都定义好,根据语句得到字段名进行操作显示配置之类的。

0

我这样说你看我理解对不对。比如说你要生成一个报表,有时候你是查询了A,B,C三个字段,有时候你是查询了B,C,D三个字段。你既没有办法知道可能的全部字段是啥,也只能依赖于拿到结果集的时候才知道查询出来了哪些字段,是么?

2

谢谢 ,是的,就是这个意思.

8

其实这个问题,我觉得你从应用层面上解决会更好一点。因为你SQL肯定有一个来源,比如说你在拼接SQL的时候,肯定会有一个select 字段的参数。比如说你可以考虑稍微封装我们的QueryBuilder,重写里面的Select方法,而后,在上下文之间传递这个SQLBuilder。