蝈蝈肚肚儿微微凉 發表於 2025-5-7 12:29:00

Python中操作Neo4j图数据库

<p><span data-cke-copybin-start="1"><span data-cke-copybin-start="1">&nbsp;</span></span></p>
<h1><span id="cke_bm_214S">&nbsp;驱动导入</span></h1>
<p>&nbsp; &nbsp; &nbsp; &nbsp;要在Python中连接和操作Neo4j数据库,我们可以使用py2neo用于连接和操作Neo4j图数据库的高级客户端库。<br>
&nbsp; &nbsp; &nbsp; &nbsp; 它提供了面向对象的接口,使得Python程序员能够方便地与 Neo4j 数据库进行交互。</p>
<h1>执行步骤</h1>
<p>&nbsp; &nbsp; &nbsp;1、创建节点与关系(Relationship)<br>
&nbsp; &nbsp; &nbsp;2、执行 Cypher 查询<br>
&nbsp; &nbsp; &nbsp;3、图数据建模<br>
&nbsp; &nbsp; &nbsp;4、数据导入导出等操作</p>
<h1>安装py2neo</h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="10" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22bash%22%2C%22code%22%3A%22pip%20install%20py2neo%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-bash hljs">pip install py2neo</code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1>安装Neo4j数据库</h1>
<p>&nbsp; &nbsp; &nbsp;需要有一个正在运行的 Neo4j 数据库,可以本地安装,也可以连接远程服务器(例如<span class="cke_widget_wrapper cke_widget_inline cke_widget_csdnlink cke_widget_wrapper_link-info cke_widget_selected" data-cke-display-name="a" data-cke-filter="off" data-cke-widget-id="9" data-cke-widget-wrapper="1">Docker部署neo4j)。</span></p>
<h1><strong>连接Neo4j</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="8" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22from%20py2neo%20import%20Graph%5Cn%23%20%E6%9C%AC%E5%9C%B0%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%EF%BC%88bolt%3A%2F%2Flocalhost%3A7687%EF%BC%89%5Cngraph%20%3D%20Graph(%5C%22bolt%3A%2F%2Flocalhost%3A7687%5C%22%2C%20auth%3D(%5C%22neo4j%5C%22%2C%20%5C%22your_password%5C%22))%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs"><span class="hljs-keyword">from py2neo <span class="hljs-keyword">import Graph
<span class="hljs-comment"># 本地默认配置(bolt://localhost:7687)
graph = Graph(<span class="hljs-string">"bolt://localhost:7687", auth=(<span class="hljs-string">"neo4j", <span class="hljs-string">"your_password"))
</span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1><strong>创建节点(Node)和关系(Relationship)</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="7" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22from%20py2neo%20import%20Node%2C%20Relationship%5Cn%5Cn%23%20%E5%88%9B%E5%BB%BA%E8%8A%82%E7%82%B9%5Cnzs%3D%20Node(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22)%5Cnls%20%3D%20Node(%5C%22Person%5C%22%2C%20name%3D%5C%22%E6%9D%8E%E5%9B%9B%5C%22)%5Cn%5Cn%23%20%E5%88%9B%E5%BB%BA%E5%85%B3%E7%B3%BB%5Cnknows%20%3D%20Relationship(zs%2C%20%5C%22knows%5C%22%2C%20ls)%5Cn%5Cn%23%20%E5%B0%86%E8%8A%82%E7%82%B9%E5%92%8C%E5%85%B3%E7%B3%BB%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%5Cngraph.create(zs%20%7C%20ls%20%7C%20knows)%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs"><span class="hljs-keyword">from py2neo <span class="hljs-keyword">import Node, Relationship

<span class="hljs-comment"># 创建节点
zs= Node(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三")
ls = Node(<span class="hljs-string">"Person", name=<span class="hljs-string">"李四")

<span class="hljs-comment"># 创建关系
knows = Relationship(zs, <span class="hljs-string">"knows", ls)

<span class="hljs-comment"># 将节点和关系写入数据库
graph.create(zs | ls | knows)
</span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1><strong>执行 Cypher 查询</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="6" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22%23%20%E6%9F%A5%E8%AF%A2%E6%89%80%E6%9C%89%20Person%20%E8%8A%82%E7%82%B9%5Cnresults%20%3D%20graph.run(%5C%22MATCH%20(p%3APerson)%20RETURN%20p.name%5C%22).data()%5Cn%5Cnfor%20result%20in%20results%3A%5Cn%20%20%20%20print(result%5B%5C%22p.name%5C%22%5D)%5Cn%5Cn%23%20.run(query)%EF%BC%9A%E6%89%A7%E8%A1%8C%E4%BB%BB%E6%84%8F%20Cypher%20%E6%9F%A5%E8%AF%A2%5Cn%23%20.data()%EF%BC%9A%E5%B0%86%E6%9F%A5%E8%AF%A2%E7%BB%93%E6%9E%9C%E4%BB%A5%E5%AD%97%E5%85%B8%E5%BD%A2%E5%BC%8F%E8%BF%94%E5%9B%9E%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs"><span class="hljs-comment"># 查询所有 Person 节点
results = graph.run(<span class="hljs-string">"MATCH (p:Person) RETURN p.name").data()

<span class="hljs-keyword">for result <span class="hljs-keyword">in results:
    <span class="hljs-built_in">print(result[<span class="hljs-string">"p.name"])

<span class="hljs-comment"># .run(query):执行任意 Cypher 查询
<span class="hljs-comment"># .data():将查询结果以字典形式返回
</span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1><strong>使用&nbsp;<code>NodeMatcher</code>&nbsp;查找节点</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="5" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22matcher%20%3D%20NodeMatcher(graph)%5Cn%23%20%E6%9F%A5%E6%89%BE%E6%A0%87%E7%AD%BE%E4%B8%BA%20Person%20%E4%B8%94%20name%20%E4%B8%BA%20Alice%20%E7%9A%84%E8%8A%82%E7%82%B9%5Cnzs%20%3D%20matcher.match(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22).first()%5Cnprint(zs)%5Cn%5Cn%23%20.match(label%2C%20**%E5%B1%9E%E6%80%A7)%EF%BC%9A%E5%8C%B9%E9%85%8D%E6%A0%87%E7%AD%BE%E5%92%8C%E5%B1%9E%E6%80%A7%5Cn%23%20.first()%EF%BC%9A%E8%BF%94%E5%9B%9E%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8C%B9%E9%85%8D%E9%A1%B9%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs">matcher = NodeMatcher(graph)
<span class="hljs-comment"># 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.<span class="hljs-keyword">match(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三").first()
<span class="hljs-built_in">print(zs)

<span class="hljs-comment"># .match(label, **属性):匹配标签和属性
<span class="hljs-comment"># .first():返回第一个匹配项</span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1><strong>更新节点属性</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="4" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22matcher%20%3D%20NodeMatcher(graph)%5Cn%23%20%E6%9F%A5%E6%89%BE%E6%A0%87%E7%AD%BE%E4%B8%BA%20Person%20%E4%B8%94%20name%20%E4%B8%BA%20Alice%20%E7%9A%84%E8%8A%82%E7%82%B9%5Cnzs%20%3D%20matcher.match(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22).first()%5Cnzs%5B%5C%22age%5C%22%5D%20%3D%2030%5Cngraph.push(zs)%20%20%23%20%E5%B0%86%E6%9B%B4%E6%94%B9%E6%8E%A8%E9%80%81%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs">matcher = NodeMatcher(graph)
<span class="hljs-comment"># 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.<span class="hljs-keyword">match(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三").first()
zs[<span class="hljs-string">"age"] = <span class="hljs-number">30
graph.push(zs)<span class="hljs-comment"># 将更改推送到数据库</span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1><strong>删除节点和关系</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="3" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22matcher%20%3D%20NodeMatcher(graph)%5Cn%23%20%E6%9F%A5%E6%89%BE%E6%A0%87%E7%AD%BE%E4%B8%BA%20Person%20%E4%B8%94%20name%20%E4%B8%BA%20Alice%20%E7%9A%84%E8%8A%82%E7%82%B9%5Cnzs%20%3D%20matcher.match(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22).first()%5Cn%5Cngraph.delete(zs)%5Cn%23graph.delete_all()%20%E5%88%A0%E9%99%A4%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%EF%BC%88%E6%85%8E%E7%94%A8%EF%BC%89%5Cngraph.delete_all()%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs">matcher = NodeMatcher(graph)
<span class="hljs-comment"># 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.<span class="hljs-keyword">match(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三").first()

graph.delete(zs)
<span class="hljs-comment">#graph.delete_all() 删除所有内容(慎用)
graph.delete_all()</span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1><strong>创建图模型</strong></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="2" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22from%20py2neo.ogm%20import%20GraphObject%2C%20Property%5Cn%5Cnclass%20Person(GraphObject)%3A%5Cn%20%20%20%20__primarykey__%20%3D%20%5C%22name%5C%22%5Cn%5Cn%20%20%20%20name%20%3D%20Property()%5Cn%20%20%20%20age%20%3D%20Property()%5Cn%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs"><span class="hljs-keyword">from py2neo.ogm <span class="hljs-keyword">import GraphObject, Property

<span class="hljs-keyword">class <span class="hljs-title class_">Person(<span class="hljs-title class_ inherited__">GraphObject):
    __primarykey__ = <span class="hljs-string">"name"

    name = Property()
    age = Property()
</span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img width="15" height="15" class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" data-cke-widget-drag-handler="1" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122421109-1253427147.gif"></span></div>
<h1>完成例子代码:</h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="1" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22lang%22%3A%22python%22%2C%22code%22%3A%22from%20py2neo%20import%20%20Graph%2C%20Node%2C%20Relationship%2C%20NodeMatcher%5Cn%23%20%E6%9C%AC%E5%9C%B0%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%EF%BC%88bolt%3A%2F%2Flocalhost%3A7687%EF%BC%89%5Cngraph%20%3D%20Graph(%5C%22bolt%3A%2F%2F192.168.219.128%3A7687%5C%22%2C%20auth%3D(%5C%22neo4j%5C%22%2C%20%5C%22test%40123456%5C%22))%5Cn%5Cn%23%20%E5%88%9B%E5%BB%BA%E8%8A%82%E7%82%B9%5Cnzs%3D%20Node(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22)%5Cnls%20%3D%20Node(%5C%22Person%5C%22%2C%20name%3D%5C%22%E6%9D%8E%E5%9B%9B%5C%22)%5Cn%5Cn%23%20%E5%88%9B%E5%BB%BA%E5%85%B3%E7%B3%BB%5Cnknows%20%3D%20Relationship(zs%2C%20%5C%22knows%5C%22%2C%20ls)%5Cn%5Cn%23%E5%B0%86%E8%8A%82%E7%82%B9%E5%92%8C%E5%85%B3%E7%B3%BB%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%5Cngraph.create(zs%20%7C%20ls%20%7C%20knows)%5Cn%5Cnmatcher%20%3D%20NodeMatcher(graph)%5Cn%23%20%E6%9F%A5%E6%89%BE%E6%A0%87%E7%AD%BE%E4%B8%BA%20Person%20%E4%B8%94%20name%20%E4%B8%BA%20Alice%20%E7%9A%84%E8%8A%82%E7%82%B9%5Cnzs%20%3D%20matcher.match(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22).first()%5Cnzs%5B%5C%22age%5C%22%5D%20%3D%2030%5Cngraph.push(zs)%20%20%23%20%E5%B0%86%E6%9B%B4%E6%94%B9%E6%8E%A8%E9%80%81%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93%5Cn%5Cn%23%20%E6%9F%A5%E6%89%BE%E6%A0%87%E7%AD%BE%E4%B8%BA%20Person%20%E4%B8%94%20name%20%E4%B8%BA%20Alice%20%E7%9A%84%E8%8A%82%E7%82%B9%5Cnzs%20%3D%20matcher.match(%5C%22Person%5C%22%2C%20name%3D%5C%22%E5%BC%A0%E4%B8%89%5C%22).first()%5Cn%5Cn%5Cnprint(%5C%22%3D%3D%3D%3D%3D%3D%3D%E6%89%A7%E8%A1%8C%E5%AE%8C%E6%88%90%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%5C%22)%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="language-python hljs"><span class="hljs-keyword">from py2neo <span class="hljs-keyword">importGraph, Node, Relationship, NodeMatcher
<span class="hljs-comment"># 本地默认配置(bolt://localhost:7687)
graph = Graph(<span class="hljs-string">"bolt://192.168.219.128:7687", auth=(<span class="hljs-string">"neo4j", <span class="hljs-string">"test@123456"))

<span class="hljs-comment"># 创建节点
zs= Node(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三")
ls = Node(<span class="hljs-string">"Person", name=<span class="hljs-string">"李四")

<span class="hljs-comment"># 创建关系
knows = Relationship(zs, <span class="hljs-string">"knows", ls)

<span class="hljs-comment">#将节点和关系写入数据库
graph.create(zs | ls | knows)

matcher = NodeMatcher(graph)
<span class="hljs-comment"># 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.<span class="hljs-keyword">match(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三").first()
zs[<span class="hljs-string">"age"] = <span class="hljs-number">30
graph.push(zs)<span class="hljs-comment"># 将更改推送到数据库

<span class="hljs-comment"># 查找标签为 Person 且 name 为 Alice 的节点
zs = matcher.<span class="hljs-keyword">match(<span class="hljs-string">"Person", name=<span class="hljs-string">"张三").first()


<span class="hljs-built_in">print(<span class="hljs-string">"=======执行完成=============")</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><span class="cke_reset cke_widget_drag_handler_container"><img alt="" data-src="https://img2024.cnblogs.com/blog/516621/202505/516621-20250507122159110-1045958645.png"></span></span></div>
<h1><strong>常用类和方法简表</strong></h1>
<table cellspacing="0">
<tbody>
<tr>
<td>类 / 方法</td>
<td>说明</td>
</tr>
<tr>
<td>Graph()</td>
<td>连接数据库</td>
</tr>
<tr>
<td>Node()</td>
<td>创建节点</td>
</tr>
<tr>
<td>Relationship()</td>
<td>创建关系</td>
</tr>
<tr>
<td>graph.create()</td>
<td>向数据库写入节点/关系</td>
</tr>
<tr>
<td>graph.run()</td>
<td>执行 Cypher 查询</td>
</tr>
<tr>
<td>NodeMatcher()</td>
<td>查找节点</td>
</tr>
<tr>
<td>graph.delete()</td>
<td>删除节点或关系</td>
</tr>
<tr>
<td>graph.push()</td>
<td>更新节点/关系属性</td>
</tr>
<tr>
<td>graph.pull()</td>
<td>拉取数据库中最新属性</td>
</tr>
</tbody>
</table>
<h1>py2neo适用场景</h1>
<p>1、图数据库建模:社交网络、知识图谱、推荐系统<br>
2、复杂关系查询:比如“某人认识谁的朋友”<br>
3、Cypher 脚本管理和自动化操作<br>
4、与机器学习/NLP 集成使用图结构建模数据</p>
<h1>与其他Neo4j-Python驱动对比</h1>
<table>
<thead>
<tr><th>驱动</th><th>特点</th>
                </tr>



        </thead>
<tbody>
<tr>
<td><code>py2neo</code></td>
<td>高级封装,易于上手,面向对象</td>



                </tr>
<tr>
<td><code>neo4j</code>(官方驱动)</td>
<td>底层操作,性能好但略繁琐</td>



                </tr>
<tr>
<td><code>neomodel</code></td>
<td>Django 风格 ORM,适合模型驱动开发</td>



                </tr>



        </tbody>



</table>
<h1>操作小结</h1>
<table cellspacing="0">
<tbody>
<tr>
<td>功能</td>
<td>方法</td>



                </tr>
<tr>
<td>连接数据库</td>
<td>Graph(...)</td>



                </tr>
<tr>
<td>创建节点</td>
<td>Node(...)</td>



                </tr>
<tr>
<td>创建关系</td>
<td>Relationship(...)</td>



                </tr>
<tr>
<td>插入数据</td>
<td>graph.create()</td>



                </tr>
<tr>
<td>查找节点</td>
<td>NodeMatcher(graph).match()</td>



                </tr>
<tr>
<td>执行查询</td>
<td>graph.run()</td>



                </tr>
<tr>
<td>更新属性</td>
<td>graph.push()</td>



                </tr>
<tr>
<td>删除节点关系</td>
<td>graph.delete()</td>



                </tr>
<tr>
<td>清空数据库</td>
<td>graph.delete_all()</td>



                </tr>



        </tbody>



</table>
<p>&nbsp; &nbsp; &nbsp; &nbsp;特别说明:py2neo是一个功能强大、语法友好、支持对象建模的 Neo4j Python 库,特别适合构建图数据库应用和做图结构数据的快速原型开发。</p>
<p>
<span data-cke-copybin-start="1">
<span data-cke-copybin-end="1">​</span></span></p><br><br>
来源:https://www.cnblogs.com/angelasp/p/18863993
頁: [1]
查看完整版本: Python中操作Neo4j图数据库