前提条件

改造

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

Python FastAPI 获取 Neo4j 数据的更多相关文章

  1. 【原创】python爬虫获取网站数据并存入本地数据库

    #coding=utf-8 import urllib import re import MySQLdb dbnumber = MySQLdb.connect('localhost', 'root', ...

  2. 洗礼灵魂,修炼python(57)--爬虫篇—知识补充—编码之对比不同python版本获取的数据

    前面既然都提到编码了,那么把相关的编码问题补充完整吧 编码 之前我说过,使用python2爬取网页时,容易出现编码问题,下面就真的拿个例子来看看: python2下: # -*- coding:utf ...

  3. python修改获取xlsx数据

    刚才要修改一个表格的数据,在网上搜了下方法,做出以下总结: 简单的取出数据以及写入数据 import xlrd data = xlrd.open_workbook(r'C:\Users\亦清\Desk ...

  4. 通过Python SDK 获取tushare数据

    导入tushare import tushare as ts 这里注意, tushare版本需大于1.2.10 设置token ts.set_token('your token here') 以上方法 ...

  5. python之psutil模块(获取系统性能数据)

    psutil模块 1.介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  6. Python股票分析系列——系列介绍和获取股票数据.p1

    本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...

  7. [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息

    本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...

  8. python获取Excel数据

    Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...

  9. 实时获取股票数据,免费!——Python爬虫Sina Stock实战

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 实时股票数据的重要性 对于四大可交易资产:股票.期货.期权.数字货币来说,期货.期权.数字货币,可以从交 ...

  10. Python用pandas获取Excel数据

    import pandas as pd df1 = pd.DataFrame(pd.read_excel(r'C:\python测试文件\我的三国啊.xlsx',sheet_name='Sheet1' ...

随机推荐

  1. 字节序:大端和小端(Big endian and Little endian)(转自维基百科)

    简介[编辑] 在几乎所有的机器上,多字节对象都被存储为连续的字节序列.例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100.且x的四个字节将被存储 ...

  2. Util应用框架基础(六) - 日志记录(一) - 正文

    本文介绍Util应用框架如何记录日志. 日志记录共分4篇,本文是正文,后续还有3篇分别介绍写入不同日志接收器的安装和配置方法. 概述 日志记录对于了解系统执行情况非常重要. Asp.Net Core ...

  3. String 的 indexOf 与 search 方便的区别

    String 这个对象里面包含许多方法 今天只要讲 indexOf 与 search 1.indexOf stringObject.indexOf(searchvalue,fromindex) 2.s ...

  4. JavaScript高级程序设计笔记06 集合引用类型

    集合引用类型 1. Object(详见c08 p205) 适合存储,在应用程序间交换数据 创建实例: a. 显式构造函数 b. 字面量-->不会调用构造函数(代码更少.更有封装感) 函数:大量参 ...

  5. python之继承的方法重写

    目录 普通方法 方法重写super().xxx() 我们在python之继承及其实现方法中已经学会了打印子类在父类继承的属性 那么我们怎么打印出子类中特有的属性呢 普通方法 我们当然可以在子类中添加新 ...

  6. Maven的安装与配置本地仓库,镜像源,环境变量。

    参考视频: 黑马程序员2023新版JavaWeb开发教程,实现javaweb企业开发全流程 [小飞非系列]最新Maven实战教程-项目实战构建利器 一.下载Maven安装包 注意安装maven前要先安 ...

  7. jdk11的HttpClient

    我们都知道在jdk11之前都在用okhttp或者org.apache.httpcomponents  其实早在jdk9的时候这个方案就在孵化中 上面的截图来自openjdk的官网,注:openjdk是 ...

  8. Kubernetes: client-go 源码剖析(一)

    0. 前言 在看 kube-scheduler 组件的过程中遇到了 kube-scheduler 对于 client-go 的调用,泛泛的理解调用过程总有种隔靴搔痒的感觉,于是调转头先把 client ...

  9. 经典卷积神经网络LeNet&AlexNet&VGG

    LeNet LeNet-5是一种经典的卷积神经网络结构,于1998年投入实际使用中.该网络最早应用于手写体字符识别应用中.普遍认为,卷积神经网络的出现开始于LeCun等提出的LeNet网络,可以说Le ...

  10. 【C#】【串口通信(Serial Port)】无法使用(using System.IO.Ports;)命名空间<Error:SerialPort不存在上下文>

    1.包缺失导致--安装相应包: 2.等待命令行初始化--输入命令: Install-Package Microsoft.Windows.Compatibility -Version 5.0.2 参考网 ...