我想检查数据库表中是否存在一行。我第一次使用这种方法:
type MyStruct struct {
ID uint32
Key string
Value string
}
var result MyStruct
err := db.
Where("id = ? AND `key` = ? AND `value` = 0", myID, myKey).
First(&result).
Error
if err != nil {
if err == gorm.ErrRecordNotFound {
logrus.Error("ErrRecordNotFound")
}
logrus.Errorf("Other DB error: %s", err.Error())
}
但我想通过编写原始SQL来实现这一点。我尝试了以下操作:
var result bool
db.Raw("SELECT EXISTS(SELECT 1 FROM my_table WHERE id = ? AND `key` = ? AND `value` = ?)",
myID, myKey, "0").Scan(&result)
但我得到这个错误:
unsupported destination, should be slice or struct.
我还尝试使用方法Exec
,也得到了同样的错误。
请注意,变量db
是一个*gorm.DB
示例。
7条答案
按热度按时间qxsslcnc1#
您可以尝试以下方法
rqdpfwrv2#
如果要避免ErrRecordNotFound错误,可以使用类似于db.Limit(1).Find(&user)的Find方法,Find方法接受结构数据和切片数据
gv8xihay3#
您的
result
应该是一个结构体或切片,而不是布尔值。更多信息,请访问:https://gorm.io/docs/sql_builder.html#Raw-SQL这应该行得通:
o2g1uqev4#
检查是否存在的另一种方法是使用
Count
:iszxjhcz5#
也许是一个迟来的回复,但我想分享我找到的答案,它可以直接扫描到一个布尔值。变量的名称应该改为大写字母来实现这一点。
例如:
dldeef676#
对于我来说,用
find
尝试这个方法并不奏效,我发现最好的方法如下:ds97pgxw7#
这应该行得通: