Neo4j 基础教程(三):数据建模与程序连接实战
Neo4j 基础教程三数据建模与程序连接实战环境macOS Neo4j PythonPart 1数据建模最佳实践建模原则原则一按业务语义建模而非表结构图数据库的优势在于关系先想清楚「是什么」和「如何关联」。场景节点标签关系类型关键属性社交网络:User:FOLLOWSsince电商:Product,:Customer:PURCHASEDquantity, date推荐系统:User,:Item:RATEDscore组织架构:Employee:REPORTS_TOsince关系方向的设计有天然方向REPORTS_TO有向双向均可查询[:KNOWS]可两端 MATCH无方向属性关系如MATCH (a)-[r:distance {km: 100}]-(b)建模示例电影推荐系统// 创建电影数据模型 CREATE (u1:User {name: 张三, age: 28}), (u2:User {name: 李四, age: 35}), (m1:Movie {title: 流浪地球, genre: 科幻, rating: 8.5}), (m2:Movie {title: 满江红, genre: 悬疑, rating: 7.8}), (a1:Actor {name: 吴京, country: 中国}), (a2:Actor {name: 沈腾, country: 中国}); MATCH (m1:Movie {title:流浪地球}), (a1:Actor {name:吴京}) CREATE (a1)-[:ACTED_IN]-(m1); MATCH (m2:Movie {title:满江红}), (a2:Actor {name:沈腾}) CREATE (a2)-[:ACTED_IN]-(m2); MATCH (u1:User {name:张三}), (m1:Movie {title:流浪地球}) CREATE (u1)-[:RATED {score: 9}]-(m1); MATCH (u1:User {name:张三}), (m2:Movie {title:满江红}) CREATE (u1)-[:RATED {score: 6}]-(m2); MATCH (u2:User {name:李四}), (m1:Movie {title:流浪地球}) CREATE (u2)-[:RATED {score: 8}]-(m1);查询示例给用户推荐电影// 找到张三喜欢的演员主演但张三还没看过的电影 MATCH (u:User {name: 张三})-[:RATED {score: 8}]-(m:Movie)-[:ACTED_IN]-(a:Actor) WHERE NOT (u)-[:RATED]-(m) RETURN m.title AS 推荐电影, a.name AS 主演, m.rating AS 评分 ORDER BY m.rating DESCPart 2Python 连接 Neo4jneo4j-driver安装驱动pipinstallneo4j连接数据库fromneo4jimportGraphDatabaseclassNeo4jConnection:def__init__(self,uri,user,password):self.driverGraphDatabase.driver(uri,auth(user,password))defclose(self):self.driver.close()defquery(self,cypher,parametersNone):withself.driver.session()assession:resultsession.run(cypher,parameters)return[dict(record)forrecordinresult]# 连接Docker 默认地址connNeo4jConnection(uribolt://localhost:7687,userneo4j,passwordpassword)完整示例增删改查# 写入数据 defcreate_user(conn,name,age):cypher MERGE (u:User {name: $name}) SET u.age $age RETURN u resultconn.query(cypher,{name:name,age:age})print(f创建用户:{result[0][u][name]})create_user(conn,王五,30)# 查询数据 deffind_friends(conn,user_name):cypher MATCH (u:User {name: $name})-[:KNOWS]-(friend) RETURN friend.name AS name, friend.age AS age returnconn.query(cypher,{name:user_name})friendsfind_friends(conn,Alice)forfinfriends:print(f好友:{f[name]}, 年龄:{f[age]})# 事务写入 defcreate_relationship(conn,from_name,to_name,rel_type):cypherf MATCH (a:User {{name: $from}}), (b:User {{name: $to}}) MERGE (a)-[:{rel_type}]-(b) conn.query(cypher,{from:from_name,to:to_name})print(f创建关系:{from_name}-{to_name})create_relationship(conn,Bob,Carol,KNOWS)conn.close()推荐学习路径第1天安装 Neo4j熟悉 Browser 操作 → 教程一 第2天掌握 Cypher CRUD → 教程二 第3天设计自己的数据模型写 Python 连接常用资源Neo4j Cypher 官方文档Neo4j Python DriverNeo4j Browser 快捷键三篇教程已完成涵盖安装入门 → Cypher 查询 → 数据建模与代码连接
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557273.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!