2016-10-05 31 views
1

我正在使用Neo4j螺栓驅動器並執行少量查詢,我必須在ID列表中檢查節點。連接列表對象到密碼器

查詢:

MATCH (n)-[r]->(m) WHERE ID(n) in [1,2,3,4] RETURN n,r,m 

做同樣的使用Python失敗:

l = [1,2,3,4] 
query = 'MATCH (n)-[r]->(m) WHERE ID(n) in '+list+' RETURN n,r,m' 

執行失敗,此錯誤:

query = 'MATCH (n)-[r]->(m) WHERE ID(n)' in '+list+' RETURN n,r,m' 
TypeError: cannot concatenate 'str' and 'int' objects 

我們怎樣才能做到這一點?

回答

1

您的list不是String(str)類型。由於intstr沒有自然的串聯方式,所以您會收到此錯誤。

製作list字符串像list = '[1,2,3,4]'會幫助。

btw list是python中的保留關鍵字。你應該使用不同的名字。

+0

neo4j.v1.exceptions.ResultError:End of stream面對此錯誤 –

+0

相同的查詢返回Web控制檯中的結果,但在python中引發異常 –

+0

請將問題粘貼到此處,如果它與問題相關或打開新的一。這聽起來像是一個新問題,因爲str/int連接已解決。 – tuergeist

1

如果您使用的是司機,你應該使用這個參數,從而避免了所有的字符串的重整和字串的問題(這是明確建議反對):

query = 'MATCH (n)-[r]->(m) WHERE ID(n) in {id_list} RETURN n,r,m' 
params = {'id_list': [1, 2, 3, 4]} 
session.run(statement=query, parameters=params) 

有幾種成分(標籤,關係類型),但無法進行參數化,但在可能的情況下,它使您的查詢更快更清晰地使用此功能。查看the docs瞭解更多關於它們的信息。