Python Py2neo(V4)-属性错误:&x27;图';对象没有属性';找到一个';

Python Py2neo(V4)-属性错误:&x27;图';对象没有属性';找到一个';,python,flask,neo4j,py2neo,Python,Flask,Neo4j,Py2neo,我正在尝试将neo4j flask应用程序更新为Py2Neo V4,但我找不到“find_one”函数是如何被替换的。(妮可·怀特使用Py2Neo V2) 我的设置: Ubuntu 18.04 Python 3.6.5 Neo4j服务器版本:3.4.6(社区) Requirements.txt(其余代码来自Nicole White的github存储库): 注册用户时收到错误: AttributeError:“Graph”对象没有“find_one”属性 “User.find()方法

我正在尝试将neo4j flask应用程序更新为Py2Neo V4,但我找不到“find_one”函数是如何被替换的。(妮可·怀特使用Py2Neo V2)

我的设置:

  • Ubuntu 18.04
  • Python 3.6.5
  • Neo4j服务器版本:3.4.6(社区)
Requirements.txt(其余代码来自Nicole White的github存储库):

注册用户时收到错误:

AttributeError:“Graph”对象没有“find_one”属性

“User.find()方法使用py2neo的Graph.find_one()方法来查找 数据库中的一个节点,其标签为:User和给定的用户名, 正在返回py2neo.Node对象。“

在Py2Neo V3中,功能
find_one
->可用

在Py2Neo V4中,不再有find函数


有人想到了如何在V4中解决它,或者正在降级?

py2neo V4有一个
first
函数,可以与
节点匹配器一起使用。见:

也就是说。。。v4引入了GraphObjects(至少到目前为止),我发现它非常整洁

在链接的github示例中,用户是通过以下方式创建的:

user = Node('User', username=self.username, password=bcrypt.encrypt(password))
graph.create(user)
发现

user = graph.find_one('User', 'username', self.username)
在py2neo v4中,我将使用

class User(GraphObject):
    __primarykey__ = "username"

    username = Property()
    password = Property()

 lukas = User()
 lukas.username = "lukasott"
 lukas.password = bcrypt.encrypt('somepassword')
 graph.push(lukas)

据我所知,
first
函数提供了与v3文档中引用的
find_one
相同的保证,“如果找到多个匹配节点,则不会失败。”

基于,下面是一个最小的示例,展示了如何使用
self.match().first()
而不是
find_one()
。 使用
Property()
设置属性,以提供对基础节点属性的访问器。(此处的文档:)

来自py2neo导入图,节点
从passlib.hash导入bcrypt
从py2neo.ogm导入GraphObject,属性
图=图()
类用户(GraphObject):
__primarykey_u_='username'
用户名=属性()
密码=属性()
定义初始化(self,用户名):
self.username=用户名
def查找(自我):
user=self.match(图形,self.username).first()
返回用户
def寄存器(自身、密码):
如果不是self.find():
user=Node('user',username=self.username,password=bcrypt.encrypt(password))
创建(用户)
返回真值
其他:
返回错误

这对我很有效。请参考下面的链接

def find(self):
user=graph.nodes.match(“user”,self.username).first()
返回用户

另一个解决此问题的简单方法是用以下内容替换
查找一个

from py2neo import Graph, NodeMatcher
matcher = NodeMatcher(graph)

user = matcher.match('user', name='name').first()

我在这里的开放点是:类用户(GraphObject):名称错误:名称“GraphObject”未定义->认为我可以从py2neo导入GraphObject OK解决:从py2neo.ogm导入GraphObject,属性,标签是的,感谢V5中的更新,它们改进了很多:-)因此这是v3语法的替代品:User=graph.find_one(“User”,“name”“约翰”)谢谢!很好用!
user = User.match(graph, "lukasott").first()
from py2neo import Graph, NodeMatcher
matcher = NodeMatcher(graph)

user = matcher.match('user', name='name').first()