Neo4j中使用Cypher语言批量创建中文语句遇到的问题

1、前提

  我是采用py2neo工具包,在pycharm中拼接Cypher查询语言,使用graph.run(cypher)往Neo4j Browser中批量创建节点。其中,字符串cypher是我处理好的拼接语句。(和我在java拼接mysql语句一样,属于是老本行、手艺活了)

2、如何确定自己写入的是哪一个数据库

  这个问题99%的博文都没有提到,如果你没有写好的话,导入的就是你项目下DBMS的默认的DB了,这怎么能忍?
  前提我们得开启这个项目的DBMS,也就是让自己项目的数据库管理系统保持Active的状态,否则会报错(连接错误)。
  graph = Graph('http://localhost:7474/', auth=("neo4j", "12345678"), name='spot') 这一条语句的name就是确定自己数据库的名称。neo4j是默认的用户名,我没改。12345678是密码。

3、批量写入的Cypher语言中出现单引号和双引号的报错

  这是转义问题。我们自己在拼接的时候全部用单引号包住属性值,然后把单引号中的属性值用str.replace()替换成反斜杠加上单引号(转义)即可。因为单引号中可以包含双引号,所以这个就不处理了。\'代表一个单引号字符,\\'表示在单引号前加上斜杠。

4、属性(key)第一个字符是数字报错

  参考Neo4j: numeric property key
  Cypher语言不允许数字作为第一个字符,我们需要对属性加上反引号进行转义。
  如下代码是我自己写用来解决3、4问题的,自行替换变量即可。spo代表三元组,存放属性和属性值。spo[0]代表一个属性,spo[1]代表一个属性值。spo[0][0].isdigit()是判断属性的第一个字符是否是数字。

    if spo[0][0].isdigit():
        properties = properties + '`' + spo[0].replace("\'", "\\'") + '`' + ':' + "'" + spo[1].replace("\'", "\\'") + "'"
    else:
        properties = properties + spo[0].replace("\'", "\\'") + ':' + "'" + spo[1].replace("\'", "\\'") + "'"

  下面是在Python中最终拼接成的cypher语句:

CREATE (spot:旅游:公园 {地理位置:'北京市南部',所属城市:'北京市',建议游玩时长:'3-4小时',DESC:'天坛,世界文化遗产,全国重点文物保护单位,国家AAAAA级旅游景区,全国文明风景旅游区示范点。
天坛,在北京市南部,东城区永定门内大街东侧。占地约273万平方米。天坛始建于明永乐十八年(1420年),清乾隆、光绪时曾重修改建。为明、清两代帝王祭祀皇天、祈五谷丰登之场所。天坛是圜丘、祈谷两坛的总称,有坛墙两重,形成内外坛,坛墙南方北圆,象征天圆地方。主要建筑在内坛,圜丘坛在南、祈谷坛在北,二坛同在一条南北轴线上,中间有墙相隔。圜丘坛内主要建筑有圜丘坛、皇穹宇等等,祈谷坛内主要建筑有祈年殿、皇乾殿、祈年门等。',景点级别:'AAAAA级',所属国家:'中国',著名景点:'圜丘',著名景点:'皇穹宇',适宜游玩季节:'春秋两季最佳',门票价格:'15.00',中文名:'天坛公园',占地面积:'273万平方米',建造时间:'1420年'})

  未经允许不得转载。有帮助的话,请给博主点点支持吧。谢谢!

你可能感兴趣的:(#,知识图谱,cypher,知识图谱,neo4j)