簡體   English   中英

py2neo-如何為節點使用merge_one函數以及多個屬性?

[英]py2neo - How can I use merge_one function along with multiple attributes for my node?

我已經克服了避免通過使用merge_one函數在數據庫上創建重復節點這一問題:

t=graph.merge_one("User","ID","someID") 

這將創建具有唯一ID的節點。 我的問題是我找不到將多個屬性/屬性以及自動添加的ID(例如日期)添加到我的節點的方法。 我已經設法以舊的“重復”方式實現了這一點,但由於merge_one無法接受更多參數,因此現在不起作用! 有任何想法嗎???

Graph.merge_one僅允許您指定一個鍵值對,因為它打算與節點標簽和屬性上的唯一性約束一起使用。 通過merge_one通過其唯一ID查找節點,然后設置屬性有什么問題嗎?

t = graph.merge_one("User", "ID", "someID")
t['name'] = 'Nicole'
t['age'] = 23
t.push()

我知道我來晚了...但是我認為仍然有用

使用py2neo == 2.0.7和文檔(關於Node.properties ):

...,后者是擴展dict的PropertySet的實例。

所以以下對我有用:

m = graph.merge_one("Model", "mid", MID_SR)
m.properties.update({
    'vendor':"XX",
    'model':"XYZ",
    'software':"OS",
    'modelVersion':"",
    'hardware':"",
    'softwareVesion':"12.06"
})

graph.push(m)

這個hacky函數將遍歷屬性,值和標簽,並逐漸消除所有與提交的每個條件都不匹配的節點。 最終結果將是與所有提供的屬性和標簽匹配的所有(如果有)節點的列表。

def find_multiProp(graph, *labels, **properties):
    results = None
    for l in labels:
        for k,v in properties.iteritems():
            if results == None:
                genNodes = lambda l,k,v: graph.find(l, property_key=k, property_value=v)
                results = [r for r in genNodes(l,k,v)]
                continue
            prevResults = results
            results = [n for n in genNodes(l,k,v) if n in prevResults]
    return results

通過將兩個函數組合在一起,最終結果可用於評估唯一性並(如果為空)創建一個新節點...

def merge_one_multiProp(graph, *labels, **properties):
    r = find_multiProp(graph, *labels, **properties)
    if not r:
        # remove tuple association
        node,= graph.create(Node(*labels, **properties))
    else:
        node = r[0]
    return node

例...

from py2neo import Node, Graph
graph = Graph()

properties = {'p1':'v1', 'p2':'v2'}
labels = ('label1', 'label2')

graph.create(Node(*labels, **properties))
for l in labels:
    graph.create(Node(l, **properties))
graph.create(Node(*labels, p1='v1'))

node = merge_one_multiProp(graph, *labels, **properties)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM