Python FastAPI 获取 Neo4j 数据

python,fastapi,获取,neo4j,数据 · 浏览次数 : 64

小编点评

## Content Generation Script This script generates API endpoints for searching and adding nodes in a Neo4j database using FastAPI. **Initial Setup:** 1. **Import necessary libraries:** * `logging` for logging information * `fastapi` for creating the API server * `utils.neo4j_provider` for accessing and controlling the Neo4j driver * `asyncDriver` for executing asynchronous queries 2. **Define API routes:** * `/add`: Creates a new node with a specified `code`, `message`, and `data` * `/search`: * Searches for nodes matching a given `q` (name) using Cypher query * Returns a list of found nodes in JSON format **Specific Functions:** * `driver` and `async_driver` methods handle Neo4j driver interactions for sync and async execution, respectively. * `add_node` adds a node with a given `data` to the Neo4j database. * `get_search` uses an asynchronous driver to perform Cypher query and returns a list of matching nodes. * `serialize_person` converts a Neo4j node into a JSON object containing relevant information. **Running the Server:** 1. Run the server on the local host with the specified port. 2. Access the API endpoints at the provided URL (e.g., `127.0.0.1:8000/api/node/search?name=%E9%99%88%E9%95%BF%E5%85%B4`). 3. The server will respond with JSON data containing search results. **Note:** This script assumes you have already set up a Neo4j database with appropriate data. You can modify the `settings` dictionary with the necessary database details.

正文

前提条件

改造

utils/neo4j_provider.py
增加了暴露给外面调用的属性,同时提供了同步和异步执行的驱动

#!/usr/bin/python3
import os

from neo4j import GraphDatabase, AsyncGraphDatabase, basic_auth, Driver, AsyncDriver
from settings import settings


# Neo4j 数据库操作类
class Neo4jProvider:
    """创建 Neo4j 数据库连接"""

    def __init__(self) -> None:
        # 获取环境变量值,如果没有就返回默认值
        self.url = settings.NEO4J_URI
        self.username = settings.NEO4J_USER
        self.password = settings.NEO4J_PASSWORD
        self.neo4j_version = settings.NEO4J_VERSION
        self.database = settings.NEO4J_DATABASE
        self.port = int(settings.NEO4J_PORT)

    # 同步驱动
    def driver(self) -> Driver:
        return GraphDatabase.driver(self.url, auth=basic_auth(self.username, self.password))

    # 异步驱动
    def async_driver(self) -> AsyncDriver:
        return AsyncGraphDatabase.driver(self.url, auth=basic_auth(self.username, self.password))


# 同步驱动。暴露给外面调用
driver = Neo4jProvider().driver()

# 异步驱动。暴露给外面调用
asyncDriver = Neo4jProvider().async_driver()

routers/node_router.py
添加一个查询数据的接口方法

#!/usr/bin/python3

import logging
from fastapi import APIRouter, status
from fastapi.responses import JSONResponse
from utils.neo4j_provider import asyncDriver
from settings import settings

router = APIRouter()


# 定义一个根路由
@router.get("/add")
def add_node():
    # TODO 往 neo4j 里创建新的节点
    data = {
        'code': 0,
        'message': '',
        'data': 'add success'
    }
    return JSONResponse(content=data, status_code=status.HTTP_200_OK)


@router.route("/search")
async def get_search(q: str = None):
    if q is None:
        return []
    cql = ("""
                 MATCH (p:Person) WHERE p.name CONTAINS $name RETURN p
             """)
    records, _, _ = await asyncDriver.execute_query(
        cql,
        name=q.query_params['name'],  # 将参数 q 传给cql 里的 $name 变量 -- Python 很聪明,直接 q.query_params 就可以获取参数值了
        database_=settings.NEO4J_DATABASE,
        routing_="r",
    )
    for record in records:
        # 打印出 record 属性
        logging.info("%s, %s", record["p"]["name"], record["p"]["generation"])
    # 转成 json
    data = [serialize_person(record["p"]) for record in records]
    return JSONResponse(content=data, status_code=status.HTTP_200_OK)


def serialize_person(person):
    return {
        "id": person["id"],
        "name": person["name"],
        "generation": person["generation"],
        "votes": person.get("votes", 0)
    }

运行效果

http://127.0.0.1:8000/api/node/search?name=%E9%99%88%E9%95%BF%E5%85%B4
image

与Python FastAPI 获取 Neo4j 数据相似的内容:

Python FastAPI 获取 Neo4j 数据

### 前提条件 - 先往Neo4j 里,准备数据 参考:https://www.cnblogs.com/vipsoft/p/17631347.html#%E5%88%9B%E5%BB%BA%E4%BC%A0%E6%89%BF%E4%BA%BA - 搭建 FastAPI 项目:https://www

在线问诊 Python、FastAPI、Neo4j — 问题咨询

目录查出节点拼接节点属性测试结果问答演示 通过节点关系,找出对应的节点,获取节点属性值,并拼接成想要的结果。 接上节生成的CQL # 输入 question_class = {'args': {'看东西有时候清楚有时候不清楚': ['symptom']}, 'question_types': ['s

在线问诊 Python、FastAPI、Neo4j — 创建药品节点

目录前提条件创建节点 Demo准备数据创建药品标签节点 在线问诊 Python、FastAPI、Neo4j — 创建节点 Neo4j 节点的标签可以理解为 Java 中的实体。 根据常规流程:首先有什么症状,做哪些对应的检查,根据检查诊断什么疾病,需要用什么药物治疗,服药期间要注意哪些饮食,需要做哪

在线问诊 Python、FastAPI、Neo4j — 创建症状节点

目录症状数据创建节点附学习 电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况。症状一般可以从主诉中提取。 症状数据 symptom_data.csv CSV 中,没有直接一行一个症状,主要想后面将 症状 => 疾病 做关联,最后会在一个 Excel 中表达 所以每行实际对应一个症病,

在线问诊 Python、FastAPI、Neo4j — 创建 检查节点

目录检查数据创建节点 根据不同的症状,会建议做些相对应的检验、检查 检查数据 examine_data.csv 建议值用“”引起来。避免中间有,号造成误识别 检查 "膝关节核磁" "眼睛酸胀" "视力" "砂眼" "辨色力" "角膜" "眼底" 创建节点 参考 创建药品 节点。 import log

在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点

目录饮食数据创建节点 根据疾病、症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用“”引起来。避免中间有,号造成误识别 饮食 "辣椒" "大蒜" "芥末" "海鲜" "胡萝卜" "核桃仁" "菠菜" "西红柿" "香蕉" 创建节点 重构代码,将 def exe

在线问诊 Python、FastAPI、Neo4j — 创建 节点关系

目录关系:症状-检查关系:疾病-症状代码重构 relationship_data.csv 症状,检查,疾病,药品,宜吃,忌吃 "上下楼梯疼,不能久站,感觉有点肿","膝关节核磁","右膝髌上囊及关节腔少量积液","扶他林","西红柿,香蕉","辣椒,大蒜" "眼睛胀痛,干涩,畏光,眼胀,眼痛,看东西

在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务

目录构建服务层接口路由层PostMan 调用 采用 Fast API 搭建服务接口: https://www.cnblogs.com/vipsoft/p/17684079.html Fast API 文档:https://fastapi.tiangolo.com/zh/ 构建服务层 qa_servi

在线问诊 Python、FastAPI、Neo4j — 生成 Cypher 语句

目录构建节点字典构建Cypher CQL语句Test 这边只是为了测试,演示效果和思路,实际应用中,可以通过NLP构建CQL 接上一篇的问题分类 question = "请问最近看东西有时候清楚有时候不清楚是怎么回事" # 最终输出 data = {'args': {'看东西有时候清楚有时候不清楚'

在线问诊 Python、FastAPI、Neo4j — 构建问题分类器

目录构建字典数据构建 Trie 字典树按实体组装字典问题分析 将问题进行分析,和系统已有的分类进行关联 构建字典数据 将构建的知识图片字典化, 用于后面对问题的解析,下图为症状的字典,其它字典同理 构建 Trie 字典树 将建字典数据,组装集合 cur_dir = '/'.join(os.path.