猿问

如何在 gocql 中插入如果不存在

我一直在阅读http://godoc.org/github.com/gocql/gocql 但我不明白如何插入 - 如果 gocql 不存在。

它指出


func (*Query) ScanCAS


func (q *Query) ScanCAS(dest ...interface{}) (applied bool, err 错误)


ScanCAS 执行轻量级事务(即包含 IF 子句的 UPDATE 或 INSERT 语句)。如果事务因为现有值不匹配而失败,则先前的值将存储在 dest。


当我跑


cluster := gocql.NewCluster("127.0.0.1")

cluster.Keyspace = "example"

cluster.Consistency = gocql.Quorum

session, _ := cluster.CreateSession()

defer session.Close()


var mapQ map[string]interface{}

var inserted bool

var id gocql.UUID

var timeline, text string

// insert a tweet

isTrue, err := session.Query(`INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST`,

    "hermano", gocql.TimeUUID(), "good night").

    ScanCAS(); if err != nil {

    log.Println(err)

}

fmt.Println(timeline, id, text)

fmt.Printf("%+v\n", isTrue)

fmt.Printf("%+v\n", inserted)

fmt.Printf("%+v\n", mapQ)

我得到:

Failed parsing statement: [INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST] reason: ArrayIndexOutOfBoundsException -1


所以我的问题是:

1. 如何在 gocql 中实际执行 INSERT IF NOT EXIST?大家能给我举个例子吗?

2. 如何做正确的ScanCAS?

3. MapScanCAS 和 ScanCAS 有什么不同?我不明白作者在谈论什么列不匹配

4. 在 godoc 页面旁边有解释 gocql 的好页面吗?


犯罪嫌疑人X
浏览 186回答 2
2回答

倚天杖

看起来像一个错字,你应该使用“IF NOT EXISTS”
随时随地看视频慕课网APP

相关分类

Go
我要回答