在OrientDB中使用Update-Upsert时获取@rid而不再搜索

时间:2016-05-18 19:26:35

标签: insert orientdb upsert

我目前正在使用OrientDB来构建图模型。我正在使用 PyOrient 发送用于创建节点和边缘的命令。

每当我使用INSERT命令时,我都会得到一个包含@rid的东西的列表。

result = db.command("INSERT INTO CNID SET connected_id {0}".format(somevalue))

print result

输出:{'@CNID':{'connected_id': '10000'},'version':1,'rid':'#12:1221'}

但是,如果我使用Update-Upsert命令,我只得到一个值作为返回值,而不是@rid。

result = db.command("UPDATE CNID SET connected_id={0} UPSERT WHERE connected_id={0}".format(cn_value)) print result

输出:1

我想知道在执行UPDATE-UPSERT操作时是否可以获得@rid。

1 个答案:

答案 0 :(得分:1)

我在 PyOrient

中创建了以下示例

<强>结构:

enter image description here

@rid操作中检索UPDATE / UPSERT的有用方法可能是在SQL命令中使用RETURN AFTER $current语法。

PyOrient代码:

import pyorient


db_name = 'Stack37308500'

print("Connecting to the server...")
client = pyorient.OrientDB("localhost",2424)
session_id = client.connect("root","root")
print("OK - sessionID: ",session_id,"\n")

if client.db_exists( db_name, pyorient.STORAGE_TYPE_PLOCAL ):
    client.db_open(db_name, "root", "root")
    result = client.command("UPDATE CNID SET connected_id = 20000 UPSERT RETURN AFTER $current.@rid WHERE connected_id = 20000")
    for idx, val in enumerate(result):
        print(val)

client.db_close() 

通过指定$current.@rid,您将能够检索结果记录的@rid(在这种情况下是新记录)。

代码输出:

Connecting to the server...
OK - sessionID:  25 

##12:1

<强>工作室:

enter image description here

您还可以修改查询以仅使用$current而不指定@rid来检索整个结果记录(在这种情况下,我更新了记录#12:1)。

<强>查询:

UPDATE CNID SET connected_id = 30000 UPSERT RETURN AFTER $current WHERE connected_id = 20000

代码输出:

Connecting to the server...
OK - sessionID:  26 

{'@CNID':{'connected_id': 30000},'version':2,'rid':'#12:1'}

<强>工作室:

enter image description here

希望有所帮助