本来不想发一些小水帖,但是这个问题我bug了好久,网上的回复帖也很少,专门记录一下。
关于 py2neo
的那些雷区:
zzu1 = graph.nodes.match("school", name="zzu").first()
修改成这样就可以:
zzu1 = graph.nodes.match('school').where("_.name='zzu'").first()
还有一个 match
的例子,我不知道为啥能跑通。这个例子和上面的例子实现的是同一个功能,都是在 label
标签中找到 name
属性值为 zzu
的结点:
zzu2 = graph.run("MATCH(a:school) WHERE a.name = 'zzu' RETURN a").data()
在参考的那个帖子中提到, match
中使用变量可能也会出现莫名奇妙的bug,可能因为我没有用match,所以下面这种格式的代码并没有报错:(就是正常的对字符串进行 format
使用)
verb = "located"
noun = "zzu"
city1 = graph.run("match(a:school)-[r:{v}]->(b:city) WHERE a.name = '{n}' RETURN b".format(v=verb, n=noun)).data()
city1 = graph.run("match(a:school)-[r:is located in]->(b:city) WHERE a.name = 'zzu' RETURN b").data()
city1 = graph.run("match(a:school)-[r:located]->(b:city) WHERE a.name = 'zzu' RETURN b").data()
利用知识图谱检索时,定义的类一定要大写,下面的检索代码把 Movie
换成 movie
就不行了。不过如果是中文知识图谱就没有问题,很奇怪。
class Movie(Model):
__primarykey__ = "name"
name = Property()
DIRECT = RelatedTo("Director")
class Director(Model):
__primarykey__ = "name"
name = Property()
DIRECT = RelatedFrom("Movie")
keanu = repo.match(Movie).where(name=noun).first()
if keanu:
s = list(keanu.DIRECT.triples())[0][2]
s = str(s).split("'")[1].replace("_", " ")
print("Let me see...The director of {m} is {d}".format(m=noun, d=s))
break
else:
print("none")
Original: https://blog.csdn.net/qq_45520647/article/details/123457168
Author: 御用厨师
Title: py2neo.database.ClientError: SyntaxError: Invalid input、py2neo.internal.hydration.HydrationError
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554723/
转载文章受原作者版权保护。转载请注明原作者出处!