Py2neo (V4) - AttributeError: у объекта 'Graph' нет атрибута 'find_one' - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь обновить приложение neo4j-flask до Py2Neo V4, и я не смог найти, как была заменена функция "find_one". (Николь Уайт использовал Py2Neo V2)

Моя настройка:

  • Ubuntu 18.04
  • Python 3.6.5
  • Neo4j Версия сервера: 3.4.6 (сообщество)

Requirements.txt (остальная часть кода взята из хранилища github Николь Уайт):

atomicwrites==1.2.0
attrs==18.1.0
backcall==0.1.0
bcrypt==3.1.4
certifi==2018.8.24
cffi==1.11.5
click==6.7
colorama==0.3.9
decorator==4.3.0
Flask==1.0.2
ipykernel==4.8.2
ipython==6.5.0
ipython-genutils==0.2.0
itsdangerous==0.24
jedi==0.12.1
Jinja2==2.10
jupyter-client==5.2.3
jupyter-console==5.2.0
jupyter-core==4.4.0
MarkupSafe==1.0
more-itertools==4.3.0
neo4j-driver==1.6.1
neotime==1.0.0
parso==0.3.1
passlib==1.7.1
pexpect==4.6.0
pickleshare==0.7.4
pkg-resources==0.0.0
pluggy==0.7.1
prompt-toolkit==1.0.15
ptyprocess==0.6.0
py==1.6.0
py2neo==4.1.0
pycparser==2.18
Pygments==2.2.0
pytest==3.7.3
python-dateutil==2.7.3
pytz==2018.5
pyzmq==17.1.2
simplegeneric==0.8.1
six==1.11.0
tornado==5.1
traitlets==4.3.2
urllib3==1.22
wcwidth==0.1.7
Werkzeug==0.14.1

Ошибка, полученная при регистрации пользователя:

AttributeError: у объекта 'Graph' нет атрибута 'find_one'

"Метод User.find () использует метод Graph.find_one () py2neo для поиска узел в базе данных с меткой: пользователь и имя пользователя, возвращая объект py2neo.Node. «

В Py2Neo V3 доступна функция find_one -> https://py2neo.org/v3/database.html?highlight=find#py2neo.database.Graph.find_one.

В Py2Neo V4 https://py2neo.org/v4/matching.html больше нет функции поиска.

Кто-то получил представление о том, как решить эту проблему в V4, или понижает здесь путь?

1 Ответ

0 голосов
/ 28 августа 2018

py2neo v4 имеет функцию first, которую можно использовать с NodeMatcher. Смотри: https://py2neo.org/v4/matching.html#py2neo.matching.NodeMatch.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)

и

user = User.match(graph, "lukasott").first()

Функция first, насколько я понимаю, предоставляет те же гарантии, что и find_one, как указано в документации v3, "и не дает сбоя, если найдено более одного совпадающего узла."

...