在 OrientDB 中更新更新插入时获取 @rid 而无需再次搜索
Getting @rid while Update-Upsert in OrientDB without searching again
我目前正在使用 OrientDB 构建图形模型。我正在使用 PyOrient 发送创建节点和边的命令。
每当我使用 INSERT 命令时,我都会得到一个列表,其中包括 return 中的 @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 命令,我只会得到一个值 return,这不是 @rid。
result = db.command("UPDATE CNID SET connected_id={0} UPSERT WHERE connected_id={0}".format(cn_value))
print result
输出:1
我想知道在执行 UPDATE-UPSERT 操作时是否也可以获取 @rid。
我在 PyOrient 中创建了以下示例:
结构:
从 UPDATE / UPSERT
操作中检索 @rid
的一个有用方法是在 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
工作室:
您还可以修改查询以仅使用 $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'}
工作室:
希望对您有所帮助
我目前正在使用 OrientDB 构建图形模型。我正在使用 PyOrient 发送创建节点和边的命令。
每当我使用 INSERT 命令时,我都会得到一个列表,其中包括 return 中的 @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 命令,我只会得到一个值 return,这不是 @rid。
result = db.command("UPDATE CNID SET connected_id={0} UPSERT WHERE connected_id={0}".format(cn_value))
print result
输出:1
我想知道在执行 UPDATE-UPSERT 操作时是否也可以获取 @rid。
我在 PyOrient 中创建了以下示例:
结构:
从 UPDATE / UPSERT
操作中检索 @rid
的一个有用方法是在 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
工作室:
您还可以修改查询以仅使用 $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'}
工作室:
希望对您有所帮助