我正在使用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
我们如何实现这一目标?
答案 0 :(得分:1)
您的list
不是String(str)类型。由于int
和str
没有自然的连接方式,因此您会收到此错误。
制作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了解更多相关信息。