py2neo 定义节点的时候如果使用中文会出现如下问题
a = Node('Person', name='小明')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
print(a, b, r)
# (:Person {name: '\u5c0f\u660e'}) (:Person {name: 'Bob'}) (小明)-[:KNOWS {}]->(Bob)
在conda的site-packages文件夹下找到py2neo/cypher/encoding.py
在 CypherEncoder类下找到encode_string函数
把这段代码:
for i in range(0, len(parts), 2):
parts[i] = (X_ESCAPE.sub(u"\\\\u00\\2", parts[i].encode("unicode-escape").decode("utf-8")).
replace(quote, escaped_quote).replace(u"\\u0008", u"\\b").replace(u"\\u000c", u"\\f"))
return quote + u"".join(parts) + quote
改成:
for i in range(0, len(parts), 2):
parts[i] = (X_ESCAPE.sub(u"\\\\u00\\2", parts[i].encode("unicode-escape").decode("unicode-escape")).
replace(quote, escaped_quote).replace(u"\\u0008", u"\\b").replace(u"\\u000c", u"\\f"))
return quote + u"".join(parts) + quote
这会就输出正常了
a = Node('Person', name='小明')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
print(a, b, r)
# (:Person {name: '小明'}) (:Person {name: 'Bob'}) (小明)-[:KNOWS {}]->(Bob)