微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Neo4j 密码查询未按预期将结果返回到 Pandas DataFrame

如何解决Neo4j 密码查询未按预期将结果返回到 Pandas DataFrame

我试图将参数传递给函数中的密码查询,但它没有按预期返回结果。第一个错误ClientError: {code: Neo.ClientError.Statement.ParameterMissing} {message: Expected parameter(s): x} 我在另一个论坛上检查了它,在那里我还必须将参数与查询运行会话一起传递我这样做了并且错误消失了但它仍然没有按预期获得结果并返回空节点。

在图 db 中,节点通过 4 种类型的关系与 id 连接。

这是我迄今为止尝试过的:

def get_objects(x):
    query = ''' MATCH (p)-[r]->(a) where r.id = $x RETURN p.id; ''' 
    resultNodes = session.run(query,x = x)
    df = DataFrame(resultNodes)
    print(df)
    return df

def find_max_1():
    authors,terms,venues,papers=0,0
    authors=get_objects(1).max()
    terms=get_objects(2).max()
    venues=get_objects(3).max()
    papers=get_objects(4).max()
    return authors,papers

def main():
    
    m = m=find_max_1()
    

if __name__ == "__main__":
    
    main()

输出为:

Empty DataFrame
Columns: []
Index: []
Empty DataFrame
Columns: []
Index: []
Empty DataFrame
Columns: []
Index: []
Empty DataFrame
Columns: []
Index: []

我无法确定这有什么问题。

对正确方向的任何帮助将不胜感激。

提前致谢。

解决方法

虽然我不喜欢这似乎是最好的解决方案,但它应该可以解决您遇到的问题:

def get_objects(x):
    query = ''' MATCH (p)-[r]->(a) where r.id = {} RETURN p.id; '''.format(int(x))
    resultNodes = session.run(query)
    df = DataFrame(resultNodes)
    print(df)
    return df

def find_max_1():
    authors,terms,venues,papers=0,0
    authors=get_objects(1).max()
    terms=get_objects(2).max()
    venues=get_objects(3).max()
    papers=get_objects(4).max()
    return authors,papers

def main():
    
    m = m=find_max_1()
    

if __name__ == "__main__":
    
    main()

我已将 x 的强制转换添加到 int 以尝试提供一些额外的注入安全性。我相信有一个功能可以清理图书馆某处的查询。

,

下面的代码对我有用。当您将整数传递给参数时,它将作为整数传递,如果为字符串则为字符串。此外,要将结果转换为数据帧,您需要获取每条记录的值和键作为列名。见下文。

from neo4j import GraphDatabase
from pandas import DataFrame

x = 88888
query = ''' MATCH (p)-[r]->(a) where r.id = $x RETURN p.id; '''

driver = GraphDatabase.driver(uri,auth=("neo4j","*****"))
session = driver.session()
result = session.run(query,x=x)

#below is important !!!
rows  = [r.values() for r in result]
cols = result.keys()

df = DataFrame(data=rows,columns=cols)
print(df)
session.close()
driver.close()

Result:
         m.ID
0   987654321

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。