高尔夫postgres如何从查询中返回计数

时间:2016-09-28 01:11:28

标签: go

我是Golang的新手,我正在使用PQ包进行postgres。我想要做的是防止重复的电子邮件,所以我有一个查询,检查用户电子邮件是否已经在数据库中

check_duplicate_emails, err := db.Prepare("select count(*) from profiles where email=$1")
    rows, err := check_duplicate_emails.Exec(email)

        if rows != nil {
        fmt.Fprintf(w,"Duplicate Email")
    } 

这是我上面的代码,我怎么能这样做,我可以像这样检查

if rows >0 { ...}

当我尝试这样做时,我收到了错误

  

无效操作:行> 0(不匹配的类型sql.Result和int)

我如何解决这个问题,因为我一直在寻找解决它的问题。

2 个答案:

答案 0 :(得分:3)

这里发生的事情是,您告诉Go,您的查询无法返回任何行(请参阅docs for Exec()

你应该使用:

  • QueryRowScan()的组合(QueryRow中的示例很好)或
  • a"从...中选择somecol ......" 没有使用Query的count(*)查询,并查看rows.Next()以查看是否有第一行。

答案 1 :(得分:1)

查看the documentation,您需要致电rows.Next()并检查其是否成功:

if rows.Next() {
    fmt.Fprintf(w, "Duplicate Email")
}
else if rows.Err() {
    fmt.Fprintf(w, "Oops, error %s", rows.Err())
}
else {
    fmt.Fprintf(w, "OK, unique email address")
}

如果没有数据,rows.Next()将返回nil - 还应调用rows.Err()来检查错误。

请注意the other answer from BJ Black - check_duplicate_emails.Exec(email)行也是错误的。