前提条件

改造

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. 线上JAVA应用平稳运行一段时间后出现JVM崩溃问题

    一.问题是怎么发现的 系统是一个定时任务系统,需要定时执行业务代码,业务代码主要是访问MYSQL数据库和缓存进行操作,该开始启动,系统日志一切正常,但是运行一段时间到凌晨后,系统就自动崩溃了,java ...

  2. windows11配置wsl2虚拟linux环境

    windows11配置wsl2虚拟linux环境 wsl( Windows Subsystem for Linux )是microsoft官方为windows开发的模拟Linux方法.避免了虚拟机vm ...

  3. Dart 初探 (一)

    前言 Dart 是 Google 为 Flutter 开发的一款用于网页编程的语言,其类似于Javascript,也是一种面向对象的语言,但其采用基于类的编程,语法风格接近C语言. 虽说它是开发用于网 ...

  4. rust程序设计(5)结构体相关练习题| 附带解答

    题目 基础结构体练习: 创建一个名为Person的结构体,包含name(字符串类型)和age(整数类型)两个字段. 写一个函数,接收一个Person实例作为参数,并打印出这个人的名字和年龄. 结构体方 ...

  5. Android 图表开源库调研及使用示例

    原文地址: Android图表开源库调研及使用示例 - Stars-One的杂货小窝 之前做的几个项目都是需要实现图表统计展示,于是做之前调研了下,做下记录 概述 AAChartCore-Kotlin ...

  6. tryhackme进攻性渗透测试-Advanced Exploitation 高级利用

    Steel Mountain 侦察 Nmap -sC -sV -O $IP -oN basic_scan.nmap Nmap -script=vuln $IP -oN vuln_scan.nmap 总 ...

  7. [THUPC 2023 初赛] 背包

    题目描述 本题中,你需要解决完全背包问题. 有 \(n\) 种物品,第 \(i\) 种物品单个体积为 \(v_i\).价值为 \(c_i\). \(q\) 次询问,每次给出背包的容积 \(V\),你需 ...

  8. ubuntu 22.04.1安装雷池开源waf应用防火墙

    ubuntu 22.04.1安装雷池开源waf应用防火墙 雷池waf是开源应用防火墙,国内首创.业内领先的智能语义分析算法 官方网站:https://waf-ce.chaitin.cn/ 官方文档:h ...

  9. 2018年长沙理工大学第十三届程序设计竞赛 G 题:逃离迷宫

    题目链接:https://www.nowcoder.com/acm/contest/96/G 思路:两遍bfs,找到p到k的情况,记录时间:找到E到k的情况,记录时间.题目超时点在于输入需要用scan ...

  10. Selenium查找元素、元素的属性和方法

    查找元素 官方文档:https://www.selenium.dev/documentation/webdriver/elements/locators/ 一般通过find_element或者find ...