py2neo.database.ClientError: SyntaxError: Invalid input、py2neo.internal.hydration.HydrationError

本来不想发一些小水帖,但是这个问题我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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球