连接列表对象到密码

时间:2016-10-05 08:16:27

标签: python neo4j cypher

我正在使用Neo4j Bolt Driver并执行一些查询,我必须在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

我们如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

您的list不是String(str)类型。由于intstr没有自然的连接方式,因此您会收到此错误。

制作list字符串list = '[1,2,3,4]'会有所帮助。

Btw list是python中的保留关键字。您应该使用其他名称。

答案 1 :(得分: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了解更多相关信息。