知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作

简介: 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作

数据基于: 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表

这是一个非常简单的web应用程序,它使用我们的Movie图形数据集来提供列表搜索、详细视图和图形可视化。

我们提供了两种不同的方式来运行应用程序:同步和异步(使用asyncio)。

Web framework:

  • sync: Flask (Micro-Webframework)
  • async: FastAPI (Micro-Webframework)

前端:

  • jquery
  • bootstrap
  • d3.js

Neo4j 数据连接: Neo4j Python Driver for Cypher Docs

py2neo 目前不支持 neo4j 5.X 所在使用 Neo4j Driver

Python连接Neo4j工具比较 Neo4j Driver、py2neo

依赖文件

基础依赖:requirements.txt

# common requirements for sync and async example
neo4j==5.10.0
typing_extensions==4.7.1

同步依赖:requirements-sync.txt

# common requirements
-r requirements.txt
# sync web framework
Flask==2.3.2

同步依赖:requirements-async.txt

# common requirements
-r requirements.txt
# async web framework
uvicorn==0.23.2
fastapi==0.101.1

安装依赖

同步依赖

D:\OpenSource\Neo4j\Python\dependencies> pip install -r requirements-sync.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

异步依赖

D:\OpenSource\Neo4j\Python\dependencies> pip install -r requirements-async.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

代码

#!/usr/bin/env python
import logging
import os
from json import dumps
from textwrap import dedent
from typing import cast
import neo4j
from flask import Flask, Response, request
from neo4j import GraphDatabase, basic_auth
from typing_extensions import LiteralString #这边红的波浪线,不用管
app = Flask(__name__, static_url_path="/static/")
# 获取环境变量值,如果没有就返回默认值
url = os.getenv("NEO4J_URI", "neo4j://172.16.3.64:7687")
username = os.getenv("NEO4J_USER", "neo4j")
password = os.getenv("NEO4J_PASSWORD", "password")
neo4j_version = os.getenv("NEO4J_VERSION", "5")
database = os.getenv("NEO4J_DATABASE", "neo4j")
port = int(os.getenv("PORT", 8080))
driver = GraphDatabase.driver(url, auth=basic_auth(username, password))
@app.route("/")
def get_index():
    return app.send_static_file("index.html")
def query(q: LiteralString) -> LiteralString:
    # this is a safe transform:
    # no way for cypher injection by trimming whitespace
    # hence, we can safely cast to LiteralString
    return cast(LiteralString, dedent(q).strip())
def serialize_person(person):
    return {
        "id": person["id"],
        "name": person["name"],
        "generation": person["generation"],
        "votes": person.get("votes", 0)
    }
@app.route("/search")
def get_search():
    try:
        q = request.args["q"]
    except KeyError:
        return []
    else:
        cql = query("""
                MATCH (p:Person) WHERE p.name CONTAINS $name RETURN p
            """)
        records, _, _ = driver.execute_query(
            cql,
            name=q,  #将参数 q 传给cql 变量
            database_=database,
            routing_="r",
        )
        for record in records:
            # 打印出 record 属性
            logging.info("%s, %s", record["p"]["name"], record["p"]["generation"])
        # desc = [record['p']["name"] for record in records]
        # logging.info(desc)
        return Response(
            # WEB 会显示序列化后的 JSON,汉字没有直观显示,属于正常现象
            dumps([serialize_person(record["p"]) for record in records]),
            mimetype="application/json"
        )
if __name__ == "__main__":
    logging.root.setLevel(logging.INFO)
    logging.info("Starting on port %d, database is at %s", port, url)
    try:
        app.run(port=port)
    finally:
        driver.close()

测试

http://127.0.0.1:8080/search?q=陈长兴

源码地址:https://gitee.com/VipSoft/VipNeo4j/tree/master/Python

参考:

https://github.com/neo4j-examples/movies-python-bolt

https://neo4j.com/developer/python/

目录
相关文章
|
存储 机器学习/深度学习 人工智能
知识图谱入门一:知识图谱介绍,Neo4j下载、安装基本使用
知识图谱入门一:知识图谱介绍,Neo4j下载、安装基本使用
1939 1
知识图谱入门一:知识图谱介绍,Neo4j下载、安装基本使用
|
安全 算法 API
产品经理必备知识——API接口
前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过一部手机就可以实现衣食住行的方方面面,比如:在家购物、远程控制家电、自动驾驶等等,背后都离不开我们今天要聊的API接口。
|
XML 数据格式 Python
旋转标注工具roLabelImg使用教程
旋转标注工具roLabelImg使用教程
旋转标注工具roLabelImg使用教程
|
5月前
|
存储 新零售 运维
2026年阿里云盘企业版收费标准:6元1个月、169元1年,企业网盘功能、优势及使用场景说明
2026年阿里云盘企业版(CDE)重磅升级:https://t.aliyun.com/U/wbANEa 配置5人起步,200GB仅6.63元/月,500GB年付169.90元!具备多人在线编辑、精细权限管控、全文检索、秒传加速及金融级安全等五大核心能力,适配新零售、制造、教育、医药等多场景,性价比远超NAS与消费级网盘。
1163 5
|
安全 数据安全/隐私保护 Windows
配置用户通过Telnet登录设备认证示例
本文介绍了通过AAA本地认证配置Telnet登录设备的组网需求、配置思路及操作步骤。企业管理员可借助此方案实现简单、安全的远程设备管理。具体包括:配置LSW1接口IP地址,使能Telnet服务器功能,设置VTY用户界面验证方式为AAA,以及创建本地用户并分配权限。最终验证显示,管理员可通过输入正确用户名和密码成功以Telnet方式登录设备。
配置用户通过Telnet登录设备认证示例
|
数据可视化 数据挖掘 定位技术
基于geopandas的空间数据分析—geoplot篇(上)
基于geopandas的空间数据分析—geoplot篇(上)
556 9
|
NoSQL Redis 数据库
通过migrate命令实现两个redis实例之间的数据迁移
通过migrate命令实现两个redis实例之间的数据迁移
|
人工智能 开发工具 计算机视觉
AI计算机视觉笔记三十:yolov8_obb旋转框训练
本文介绍了如何使用AUTODL环境搭建YOLOv8-obb的训练流程。首先创建虚拟环境并激活,然后通过指定清华源安装ultralytics库。接着下载YOLOv8源码,并使用指定命令开始训练,过程中可能会下载yolov8n.pt文件。训练完成后,可使用相应命令进行预测测试。
2328 4
|
人工智能 自然语言处理 关系型数据库
|
存储 缓存 前端开发
基于Otel的前端全链路追踪思考和实践
本文内容是笔者基于 GOTC 2023 全球开源技术峰会整理。前端为什么要接入链路追踪大家都应该经历过这样的事情:某一个页面或者某一个请求比较慢,前后端分别调查后数据对不上,或者很难说明差异的来源是由什么造成的,这就是单点监控带来的问题。然后是问题定位,前端作为系统的出入口,导致很多团队问题一般界线模棱两可的问题都会交给前端去定位,相信很容前端应该都经历过这样的痛苦,而作为前端也只能人肉的去分析这
6638 0
基于Otel的前端全链路追踪思考和实践