You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.0 KiB

5 months ago
from py2neo import Graph, Node, Relationship, Subgraph
5 months ago
5 months ago
# 连接数据库
5 months ago
db = Graph("neo4j://127.0.0.1:7687", auth=("neo4j", "DsideaL4r5t6y7u"))
5 months ago
# 修正版本查询代码
version = db.run("CALL dbms.components() YIELD versions UNWIND versions AS version RETURN version").evaluate()
print(f"Neo4j 版本: {version}")
# 清空数据
db.run("MATCH (n) DETACH DELETE n")
# 分步删除约束和索引
try:
# 删除约束
constraints = db.run("SHOW CONSTRAINTS YIELD name").data()
for constr in constraints:
db.run(f"DROP CONSTRAINT `{constr['name']}`")
# 删除索引
indexes = db.run("SHOW INDEXES YIELD name, type WHERE type <> 'LOOKUP'").data()
for idx in indexes:
db.run(f"DROP INDEX `{idx['name']}`")
except Exception as e:
print(f"删除操作失败: {e}")
# 创建节点
5 months ago
node_1 = Node("英雄", name="张无忌")
node_2 = Node("英雄", name="杨逍", power=100)
node_3 = Node("派别", name="明教")
5 months ago
# 创建关系
relations = [
(node_1, '教主', node_2),
(node_3, '统领', node_1), # 修正原代码可能的逻辑关系
(node_2, '师出', node_3)
]
5 months ago
5 months ago
# 构建子图并提交
subgraph = Subgraph(
nodes=[node_1, node_2, node_3],
relationships=[Relationship(r[0], r[1], r[2]) for r in relations]
)
5 months ago
db.create(subgraph)
from py2neo import Path
# 建一个路径:比如按照该路径查询,或者遍历的结果保存为路径
node_4, node_5, node_6 = Node(name='阿大'), Node(name='阿二'), Node(name='阿三')
path_1 = Path(node_4, '小弟', node_5, Relationship(node_6, "小弟", node_5), node_6)
db.create(path_1)
print(path_1)
# 创建一个子图,并通过子图的方式更新数据库
node_7 = Node('英雄', name='张翠山')
node_8 = Node('英雄', name='殷素素')
node_9 = Node('英雄', name='狮王')
relationship7 = Relationship(node_1, '生父', node_7)
relationship8 = Relationship(node_1, '生母', node_8)
relationship9 = Relationship(node_1, '义父', node_9)
subgraph_1 = Subgraph(nodes=[node_7, node_8, node_9], relationships=[relationship7, relationship8, relationship9])
db.create(subgraph_1)
# 创建一个新的事务
transaction_1 = db.begin()#事务开始
# 创建一个新node
node_10 = Node('武当',name = '张三丰')
transaction_1.create(node_10)
# 创建两个关系:张无忌→(师公)→张三丰 张翠山→(妻子)→殷素素
relationship_10 = Relationship(node_1,'师公',node_10)
relationship_11 = Relationship(node_7,'妻子',node_8)
transaction_1.create(relationship_10)
transaction_1.create(relationship_11)
transaction_1.commit()#事务提交
from py2neo import RelationshipMatcher
# 查询某条关系
relation = RelationshipMatcher(db)
# None表示any node哦不是表示空
print('=' * 10, 'hate关系查询结果', '=' * 10)
x = relation.match(nodes=None, r_type='hate')
for x_ in x:
print(x_)
# 为了便于查询更多类容,使用事务的方法新增一些关系和节点
transaction_2 = db.begin()
node_100 = Node('巾帼', name='赵敏')
re_100 = Relationship(node_1, 'Love', node_100)
node_101 = Node('巾帼', name='周芷若')
re_101 = Relationship(node_1, 'knows', node_101)
re_101_ = Relationship(node_101, 'hate', node_100)
node_102 = Node('巾帼', name='小昭')
re_102 = Relationship(node_1, 'konws', node_102)
node_103 = Node('巾帼', name='蛛儿')
re_103 = Relationship(node_103, 'Love', node_1)
transaction_2.create(node_100)
transaction_2.create(re_100)
transaction_2.create(node_101)
transaction_2.create(re_101)
transaction_2.create(re_101_)
transaction_2.create(node_102)
transaction_2.create(re_102)
transaction_2.create(node_103)
transaction_2.create(re_103)
transaction_2.commit()
# 增加俩关系
re1_1 = Relationship(node_101, '情敌', node_102)
re1_2 = Relationship(node_102, '情敌', node_103)
db.create(re1_1)
db.create(re1_2)
# 情敌查询结果
print('=' * 10, 'hate关系查询结果', '=' * 10)
x = relation.match(nodes=None, r_type='情敌')
for x_ in x:
print(x_)