【发布时间】:2023-03-10 10:28:01
【问题描述】:
在我的 golang 应用程序中,我需要对 MySQL 进行 SQL 查询以获取单行并将结果放入 map[string]string 键是列名。
但我不知道什么是列。查询就像
SELECT * FROM mytable
我使用“数据库/sql”。
我发现只有扫描功能
db.QueryRow("SELECT * FROM mytable").Scan(&var1, &var2,...)
但这不适用于我的情况。不知道会有多少变数。而且我还需要列名。
是否可以使用数据库/sql?
更新。我找到了如何解决这个问题的一部分。如何从结果集中获取列名。
rows, err := db.Query(sqlcommand)
cols, err := rows.Columns()
所以,我可以用来制作地图的钥匙。但我仍然不知道如何获得价值。因为,值可以有不同的类型。
data = make(map[string]string)
if rows.Next() {
columns := make([]interface{}, len(cols))
columnPointers := make([]interface{}, len(cols))
for i, _ := range columns {
columnPointers[i] = &columns[i]
}
err = rows.Scan(columnPointers...)
for i, colName := range cols {
// value is in columns[i] of interface type.
// How to extract it from here?
// ....
data[colName] = val
}
}
附:这个问题与“在 mysql 中获取表列名? "。我想获取返回数据集的列,而不仅仅是一个表。
【问题讨论】:
-
@Shadow 不是一个恰当的副本。这个问题专门针对 Go。
-
@Adrian 让我引用这个问题:“是否可以使用 database/sql ?”副本显示如何使用 sql 执行此操作。如果这不是 OP 的意图,那么问题不应该包括 sql,也可能不应该被标记为 MySQL。
-
@Shadow
database/sql是用于与 SQL 数据库交互的 Go 库的名称。我认为没有理由不应该将它标记为 mysql,因为问题是关于在 Go 中使用 MySQL。使用这两个标签似乎完全合适,我认为他们没有理由不应该包含他们从 Go 代码执行的相关查询。仅仅因为问题不是仅关于 SQL 的,并不意味着它根本与 SQL 无关。 -
Rows.Columns 返回列名,Rows.ColumnTypes 返回类型和名称。没有
LIMIT 1,QueryRow 是不合适的;改用查询。 -
很确定他们正在寻找一种特定于他们使用的标签的所有标签的解决方案。这就是标签的工作原理,这就是为什么您可以在一个问题上放置多个标签。
标签: go