登录
首页 >  Golang >  Go问答

将“SELECT *”列(多个)读取到 go 中的字符串中

来源:stackoverflow

时间:2024-04-19 20:42:24 338浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《将“SELECT *”列(多个)读取到 go 中的字符串中》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我想将 mysql 数据库列插入到 go 中的 [][]string 中,这里有一个类似的代码,它仅对一列执行此操作并将其插入到 []string 中,但我需要将更多列插入到 [][]string 中制作一个数据框。

mysql> select * from users;
+----+-----------+----------+----------+-------------------------------+--------------+
| id | fname     | lname    | uname    | email                         | contact      |
+----+-----------+----------+----------+-------------------------------+--------------+
|  1 | rishikesh | agrawani | hygull   | [email protected] | 917353787704 |
|  2 | sandeep   | e        | sandeep  | [email protected]       | 919739040038 |
|  3 | darshan   | sidar    | darshan  | [email protected]        | 917996917565 |
|  4 | surendra  | prajapat | surendra | [email protected]     | 918385894407 |
|  5 | mukesh    | jakhar   | mukesh   | [email protected]     | 919772254140 |
+----+-----------+----------+----------+-------------------------------+--------------+
5 rows in set (0.00 sec)

mysql> 
func main() {
    // db, err := sql.Open("mysql", "<username>:<password>@tcp(127.0.0.1:<port>)/<dbname>?charset=utf8" )
    db, err := sql.Open("mysql", "hygull:admin@67@tcp(127.0.0.1:3306)/practice_db?charset=utf8")

    if err != nil {
        log.Fatal(err)
    }

    rows, err := db.Query("select fname from users")

    if err != nil {
        log.Fatal(err)
    }

    firstnames:=[]string{}
    for rows.Next() {
        var fname string
        rows.Scan(&fname)
        firstnames = append(firstnames, fname)
    }

    fmt.Println(firstnames)
    db.Close()
}

解决方案


假设您的查询返回 4 列,您只需一次扫描多个值。

details:=[][]string{}
for rows.next() {
    cols := make([]string, 4) 
    rows.scan(&cols[0], &cols[1], &cols[2], &cols[3])
    details = append(details, cols)
}

如果列数不是静态的,您可以执行以下操作来自动化它,而不是手动扩展指针:

details:=[][]string{}
for rows.Next() {
    cols := make([]string, num_cols)
    // Create an array of string pointers pointing to the column strings.
    col_ptrs = make([]*string, num_cols)
    for i := 0; i < num_cols; i++ {
        col_ptrs[i] = &cols[i];
    }
    rows.Scan(col_ptrs...)
    details = append(details, cols)
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>