python如何实现neo4j数据查询接口?格式化输出json
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文描述python
如何调用neo4j
里面的数据,接口输出为json
的事情。本需求挺简单的,原理在以前的文章里面也说过了。本文就是拿个新瓶子装一下以前的老酒。然后提出一个客观存在的数据丢失的问题,并且还没有提出解决方案。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述,neo4j
数据通过python
编写的输出json
格式数据的事情。测试环境:python@3.6.8
,py2neo@2021.2.3
,neo4j@4.4.10
,flask@2.0.3
。
样本数据
创建了一个博客节点的样本数据,cypher
语句如下:
merge (n:网站:博客 {名称:'程序如此灵动',网址:'newsn.net'});
这里使用的是merge
而并不是create
,两者区别如下:
py2neo
这里python
通过py2neo
来查询数据,查询的cypher
语句是查询一个商品节点。
match(n{名称:'程序如此灵动'}) return n
代码执行:
from py2neo import Graph
graph = Graph('http://localhost:7474', auth=("neo4j", "neo4j"))
cql = "match(n{名称:'程序如此灵动'}) return n"
data = graph.run(cql).data()
print(data, type(data))
这里查询到的data
数据是个<class 'list'>
类型。输出数据类似如下:
[{'n': Node('博客', '网站', 名称='程序如此灵动', 网址='newsn.net')}]
详情可以参考:
list
数据转json
本小节内容,其实就是把list
格式数据输出为json
格式,使用的当然是python
自带的json
库。
import json
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
输出如下:
[{"n": {"网址": "newsn.net", "名称": "程序如此灵动"}}]
ensure_ascii=False
参数,是用于正常显示中文字符的。当然也可以使用格式化的json
,不会影响后续接口解析的。
代码如下:
import json
json_str = json.dumps(data, indent=4, ensure_ascii=False)
print(json_str)
输出如下:
[
{
"n": {
"网址": "newsn.net",
"名称": "程序如此灵动"
}
}
]
可以看到在list
转json
输出的时候,节点的标签数据丢失了。苏南大叔觉得,对于这种情况最好是别直接转json
。拿到的list
数据转化为一个自定义的标准后,再转json
格式。是不是会更好一些呢?这种情况待议。
HTTP服务(Flask)
因为做接口的目的就是提供调用的,目前的这个代码实现了json
输出,并不是提供接口服务。所以,这里使用flask
框架,来做个简单的服务容器。
import flask
from py2neo import Graph
import json
api = flask.Flask(__name__)
@api.route('/', methods=['get'])
def index():
graph = Graph('http://localhost:7474', auth=("neo4j", "neo4j"))
cql = "match(n{名称:'程序如此灵动'}) return n"
data = graph.run(cql).data()
json_str = json.dumps(data, indent=4, ensure_ascii=False)
return json_str
if __name__ == '__main__':
api.run(port=8888, debug=True, host='127.0.0.1')
Flask
容器服务:
解析接口返回值:
相关链接
- https://newsn.net/say/neo4j-merge.html
- https://newsn.net/say/neo4j-py2neo.html
- https://newsn.net/say/python-json-dumps.html
总结
得到数据,组织数据,然后输出数据。就是本篇文章中所做的事情,但是目前本文中所使用的方式,输出的数据实际上会有丢失,这个待议。更多neo4j
经验文章,请参考链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。