postgresql - 未应用过滤器(即空的“Where”子句)时,使用Golang网络表单从Postgres获取所有记录

标签 postgresql go

我有一个Golang函数从Postgres数据库中获取所有记录,该函数只是使用:
SELECT * from stock_transactions我想对此功能应用过滤器以在某些条件下获取记录,简而言之,我想使用:
SELECT * from stock_transactions WHERE symbol = $symb
问题在于处理以下情况:如果$symb = null,查询应充当SELECT * from stock_transactions。我可以为它写一个if-else子句,但是如果参数数量大于2,可能会很混乱。有没有更好的方法来解决这个问题?

我的功能:

func showstocks (w http.ResponseWriter, r *http.Request){

    var err error

if r.Method != "GET" {
    http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed)
    return
}

rows, err := db.Query("SELECT * FROM stock_transaction ORDER BY id DESC")
if err != nil {
    http.Error(w, http.StatusText(500), 500)
    return
}
defer rows.Close()

sks := make([]stockdata, 0)


for rows.Next() {
    sk := stockdata{}
    err := rows.Scan(&sk.Sname, &sk.Ttype, &sk.Uprice, &sk.Qty, &sk.Bfee, &sk.Ddate) 
    if err != nil {
        http.Error(w, http.StatusText(500), 500)
        return
    }
    sks = append(sks, sk)
}
if err = rows.Err(); err != nil {
    http.Error(w, http.StatusText(500), 500)
    return
}

tpl.ExecuteTemplate(w, "dashboard.gohtml", sks)

}

最佳答案

//由@mkopriva建议。尝试和测试。

包主

导入(
“fmt”
)

func main(){
// ...

// use interface{} because string types cannot be nil
var stock_symbol interface{} // the "zero-value of interface types is nil, so stock_symbol here is nil

// if empty then stock_symbol will be left as nil
if val := r.FormValue("stock_symbol"); len(val) > 0 {
    stock_symbol = val // set to the provided value
}

// ...

// now stock_symbol is either the provided string value or nil
db.Query("SELECT ... WHERE (stock_symbol = $1 OR $1 IS NULL)", stock_symbol)

}

关于postgresql - 未应用过滤器(即空的“Where”子句)时,使用Golang网络表单从Postgres获取所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61271894/

相关文章:

sql - postgres中的嵌套选择

ruby-on-rails - 修剪字符尾随的零 n 轨

http - 如何使 Go HTTP 客户端不自动跟随重定向?

pointers - 将 slice 转换为数组指针

go - 为什么 `go get` 在 Travis CI 构建中开始失败?

Go - Golang openpg - 创建 key 对并创建签名

postgresql - 将 postgresql jsonb 查询响应字符串解码为 golang 嵌套结构

spring - 在事务服务调用中执行 JSR 303 验证

php - 使用 Laravel 在 PostgreSQL 中插入空白数据

go - 在泛型 go 中模拟方法类型参数