首页 > 编程语言 >Python FastAPI 异步获取 Neo4j 数据

Python FastAPI 异步获取 Neo4j 数据

时间:2023-09-08 11:14:00浏览次数:85  
标签:NEO4J name settings Python FastAPI self driver import Neo4j

前提条件

改造

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 传给cql 里的 $name 变量
        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

标签:NEO4J,name,settings,Python,FastAPI,self,driver,import,Neo4j
From: https://www.cnblogs.com/vipsoft/p/17687070.html

相关文章

  • Python实操:内存管理与优化策略
    在Python开发过程中,合理有效地管理和优化内存使用是提高程序性能和效率的关键。本文将深入探讨Python中的内存管理机制,并分享一些实用的优化策略和具体操作步骤,帮助您更好地利用资源、减少内存占用并提升代码执行速度。一、了解Python的垃圾回收机制垃圾回收是自动处理不再被......
  • python3中几乎所有的内置函数以及简述
    以下是Python3中的所有内置函数以及它们的简单中文描述:abs(x):返回x的绝对值。all(iterable):如果可迭代对象中的所有元素都为True,则返回True;否则返回False。any(iterable):如果可迭代对象中的任何一个元素为True,则返回True;否则返回False。ascii(object):返回一个可打印的字符串,其中非......
  • Linux系统上安装.tar.gz格式的Python源码包
    要在Linux系统上安装.tar.gz格式的Python包,您可以按照以下步骤进行操作:解压文件:使用以下命令将.tar.gz文件解压缩:tar-zxvfpackage.tar.gz这将在当前目录下创建一个包含源代码的新文件夹。进入源代码目录:使用cd命令进入解压后的源代码目录:cdpackage检查依赖库:执行以下命令检查......
  • python:列表实现队列​
    什么是队列队列是一种先进先出的数据结构,类似食堂排队打饭,先入队的元素当然要先出队,先请用Python列表模拟队列。现有一列表queue=[1,2,3,4,5]被视作队列,请使用pop函数连续两次取出队首元素,再使用append函数将输入元素添加到队尾,每次操作后都要输出完整的列表。功能需求输入......
  • Python crawler - Day1(PM)
    1.set_cookie.pyimportrequestsimportjson#百度句子翻译的URLurl="https://fanyi.baidu.com/basetrans"#要传递的post参数(注意替换为自己浏览器看到的token、sign值)data={"query":"happyeveryday","from":"en",&quo......
  • Python基础2
    Python基础2 用户登陆程序需求:1.输入用户名和密码;2.判断用户名和密码是否正确?name='root'passwd='westos'3.为了防止暴力破解,登陆仅有三次机会,如果超过三次机会,报错提示;#设置用户名和密码correct_username='root'correct_password='westos'#初始化登......
  • python-day2
    1.类型转换name='宁颂姝'age=1print('我叫'+name+',今年'+str(age)+'岁')a=2b=4.4c=Falseprint(type(a),str(a),type(str(a)))print(type(a),float(a),type(float(a)))print(type(b),int(b),type(int(b)))print(type(c),int(c),type(int......
  • nicegui:Python 图形界面库,简单好用
    前言在现代计算机应用程序开发中,图形用户界面(GUI)是用户与程序交互的重要组成部分。然而,GUI开发往往需要大量的代码和复杂的布局,给开发者带来了一定的挑战。在本篇博文中,将介绍nicegui,它是一个简单易用的图形用户界面库,提供了一种简化GUI开发的方式,使开发者能够更快速地构建吸......
  • 执行python脚本报错:case by sslerror(sslcertVerificationerror(1,ssl:vertificate_ve
    【现象】  使用python编写了一个请求,报错ssl证书过期问题【解决办法】   requests.packages.urllib3.disable_warnings()  r=requests.post(service_url,data=payload,headers=self.headers,verify=False)参考链接:https://www.cnblogs.com/sea-stream/p/14......
  • Python垃圾回收
    Python版本v3.9.17分析代码的过程比较枯燥,可以直接跳转到总结。只能被其他对象引用类型比如:longobject、floatobjectfloatobject以floatobject为例子来分析,先看看结构定义typedefstruct{PyObject_HEADdoubleob_fval;}PyFloatObject;//展开PyObject_HEAD......