Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 可以从SQL查询中扫描忽略字段_Go_Cockroachdb - Fatal编程技术网

Go 可以从SQL查询中扫描忽略字段

Go 可以从SQL查询中扫描忽略字段,go,cockroachdb,Go,Cockroachdb,该方法接受的参数与SQL查询中的列数相同 由于正在执行的查询是从my_表中显示列,因此我不能忽略任何我不需要或可以忽略的列 有没有办法忽略查询结果集中不需要的某些字段 下面是我的代码: rows, err := db.Query("SHOW COLUMNS FROM " + r.Name) DieIf(err) //var field, dataType, ignoreMe1, ignoreMe2, ignoreMe3 string var field, dataType string for

该方法接受的参数与SQL查询中的列数相同

由于正在执行的查询是从my_表中显示列,因此我不能忽略任何我不需要或可以忽略的列

有没有办法忽略查询结果集中不需要的某些字段

下面是我的代码:

rows, err := db.Query("SHOW COLUMNS FROM " + r.Name)
DieIf(err)
//var field, dataType, ignoreMe1, ignoreMe2, ignoreMe3 string
var field, dataType string
for rows.Next() {
                    //This Place
                    //   |
                    //   V
    if err := rows.Scan(&field, &dataType); err != nil {
        DieIf(err)
    }
    r.Attributes[field] = Attribute{
        Name:       field,
        DataType:   dataType,
        Constraint: false,
    }
}
错误:
sql:Scan中需要5个目标参数,而不是2个,所以这里我为您提供了一个解决方案,请尝试使用此解决方案从查询中获取字段和类型

package main

import (
    "fmt"
    _ "github.com/lib/pq"
    "database/sql"
)

func main() {

    db, _ := sql.Open(
        "postgres",
        "user=postgres dbname=demo password=123456")

    rows, _ := db.Query("SELECT * FROM tableName;")

    columns, _ := rows.Columns()
    count := len(columns)
    values := make([]interface{}, count)
    valuePtr := make([]interface{}, count)

    for rows.Next() {

        for i, _ := range columns {
            valuePtr[i] = &values[i]
        }

        rows.Scan(valuePtr...)

        for i, col := range columns {

            var v interface{}

            val := values[i]

            b, ok := val.([]byte)

            if (ok) {
                v = string(b)
            } else {
                v = val
            }

            fmt.Println(col, v)
        }
    }
}

您不能忽略,如果所选字段数为5,则必须传递5个变量才能在扫描中扫描,如果您只想扫描两个值,则可以编写类似“选择字段”的查询,键入from,我无法在SHOW COLUMNS query中传递字段名。因此,您可以使用“[]接口”获取该值并根据您的要求使用。我在下面附上了代码,试试这一行,希望你能明白你的意思。谢谢。当你只需要1行时,为什么要获取所有行?使用SELECT*FROMTABLENAME LIMIT 1;相反