如果gocql中不存在,如何进行插入

我一直在阅读 http://godoc.org/github.com/gocql/gocql
我还不知道如何进行插入-如果gocql不存在。

它表示
</ p>


func(* Query)ScanCAS </ p>

func(q * Query)ScanCAS (目标... interface {})(适用于bool,错误错误)</ p>

ScanCAS执行轻量级事务(即,包含IF子句的UPDATE或INSERT语句)。 如果由于现有值不匹配而导致事务失败,则先前的值将存储在dest中。</ p>
</ blockquote>

我运行时</ p>

< pre> 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插入bool
var id gocql.UUID
var时间线,文本字符串
//插入tweet
isTrue,err:= session.Query(`INSERT INTO tweet(时间轴,id,文本)值(?,?,?)(如果不存在),
“ hermano”,gocql.TimeUUID(),“晚安”)。
ScanCAS(); 如果err!= nil {
log.Println(err)
}
fmt.Println(时间轴,id,文本)
fmt.Printf(“%+ v
”,isTrue)
fmt.Printf(“% + v
“,插入)
fmt.Printf(”%+ v
“,mapQ)
</ code> </ pre>

我得到:

无法解析的语句:[如果不存在,则将INSERT INTO tweet(时间轴,ID,文本)值(?,?,?)插入[],原因:ArrayIndexOutOfBoundsException -1 </ code> </ p>

问题是:

1.如果gocql中不存在,如何实际执行插入操作? 你们能举个例子吗?

2.如何正确执行ScanCAS?

3.是什么使MapScanCAS和ScanCAS与众不同? 我不理解作者在说什么列不匹配 < br>
4.在godoc页面旁边,有没有什么好的页面可以解释gocql?

</ p>
</ div>

展开原文

原文

I've been reading http://godoc.org/github.com/gocql/gocql Yet I don't understand how to do INSERT -- IF NOT EXIST with gocql.
It stated that

func (*Query) ScanCAS

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

ScanCAS executes a lightweight transaction (i.e. an UPDATE or INSERT statement containing an IF clause). If the transaction fails because the existing values did not match, the previous values will be stored in dest.

When I run

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
", isTrue)
fmt.Printf("%+v
", inserted)
fmt.Printf("%+v
", mapQ)

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

So my question is:
1. How to actually do INSERT IF NOT EXIST in gocql? Can you guys give me any example?
2. How to do proper ScanCAS?
3. What makes MapScanCAS and ScanCAS different? I don't understand what column mismatching are the author is talking about
4. Are there any good page that explains gocql beside its godoc page?

dougu2006
dougu2006 如果INSERT因为已经存在而没有插入新行,那么dest参数将用已经存在的行中的数据填充。“列不匹配”与gocql无法控制列返回的顺序有关,因此structunmarshalling无法正常工作,因此MapScanCAS会在地图中返回数据。
4 年多之前 回复
doubinduo3364
doubinduo3364 好吧,这很尴尬。谢谢你的纠正。现在没有任何错误。但是,您是否偶然知道在ScanCAS没有任何论据的情况下如何工作?我仍然无法理解使用ScanCAS的正确方法,因为我想我会更喜欢Scan
5 年多之前 回复
dongle0396
dongle0396 正确的语法是INSERTIFNOTEXISTS(末尾为S)
5 年多之前 回复

2个回答



看起来像是一个错字,应该使用
“ IF NOT EXISTS” </ p>
</ div>

展开原文

原文

looks like a typo, you should use "IF NOT EXISTS"



我的理解</ p>


如何在不存在的情况下进行实际插入 gocql? 你们能举任何例子吗?</ p>
</ blockquote>

由于您正在执行的LWT需要首先从Cassandra中读取数据并决定是否应插入/更新该值 ,ScanCAS将返回1)是否应用此LWT的更改,2)如果未应用,则ScanCAS将返回Cassandra中的现有值。 因此,在ScanCAS中,您应该尝试读取要插入的相同类型的数据。</ p>


如何正确执行ScanCAS?</ p>
</ blockquote> \ n

类似于问题1。</ p>


是什么使MapScanCAS和ScanCAS与众不同? 我不明白作者在说什么
列不匹配</ p>
</ blockquote>

我认为作者的意思是很容易弄乱扫描对象的顺序 返回的值/列,因此可以使用MapScanCAS避免此问题</ p>
</ div>

展开原文

原文

My understanding:

How to actually do INSERT IF NOT EXIST in gocql? Can you guys give me any example?

Since the LWT you are executing needs to read data from Cassandra first and decide if the value should be inserted/updated, ScanCAS will return 1) whether the change of this LWT is applied, 2) if not applied, ScanCAS will return the existing value(s) in Cassandra. So in ScanCAS you should try to read the same type of data you are inserting.

How to do proper ScanCAS?

Similar to question 1.

What makes MapScanCAS and ScanCAS different? I don't understand what column mismatching are the author is talking about

I think the author means that it is easy to mess up the order of scanning the returned values/columns, so you could use MapScanCAS to avoid this issue

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问