【发布时间】:2018-04-14 20:31:56
【问题描述】:
我发现neo4j-bolt-driver 有一个奇怪的行为。当我使用Pycharm 运行我的代码时,它运行得非常好,对于neo4j 的单个查询,我得到以下响应:
type: neo4j.node # I pulled out the type of the element.
<Node id=3820 labels={'city'} properties={'ID': 'xddy', 'name': 'california'}>
现在,当我打包我的代码并从中创建一个.egg,然后使用终端运行脚本以将相同的输入输入到同一个数据库时,我得到以下响应:
type: neo4j.node # I pulled out the type of the element.
(_3820:city {ID: 'xddy', name: 'california'})
现在看看响应的差异,类型相同,只是缺少对象的keys。
这导致
AttributeError。更糟糕的是我必须手动将数据解析成一个字典,以便我可以处理它。
副作用:
try:
props = node[admin].properties
node_chain[list(node[admin].labels)[0]] = props
address.append(props['name'])
except AttributeError:
# try to convert (_3820:city {ID: 'xddy', name: 'california'})
# to {'ID': 'xddy', 'name': 'california'}
# and add it to an existing dict with the key `city`
string_rep = str(node[admin])
splitted = string_rep.split('{')
label = splitted[0].split(':')[-1].strip()
payload_string = "{ " + splitted[1][:-1]
clean = payload_string.replace("'", " ").replace(":", "':'").replace(",", "','")\
.replace("{", "{'").replace("}", "'}")
temp_dict = ast.literal_eval(clean)
payload_dict = {k.strip(): v.strip() for k, v in temp_dict.items()}
address.append(payload_dict['name'])
node_chain[label] = payload_dict
我正在寻找两个答案:
- 螺栓驱动器有问题还是只是我从
egg运行时的代码 - 有没有更好的方法将无效内容解析为字典?
【问题讨论】:
-
你在 PyCharm 和你的 shell 之间运行在同一个环境中吗?我怀疑这里发生的事情是它们不是同一个环境,并且每个环境都有不同版本的
neo4j-driver模块。您是否为此使用虚拟环境?在 PyCharm 中,在 Preferences -> Project -> Project Interpreter 下,解释器是否设置为与在 shell 中执行时返回的whereis python(或python2或python3,如果您使用的是)相同的可执行路径?或者,如果您使用 virtualenv,PyCharm 项目解释器是否设置为那个? -
@RebeccaNelson 他们都使用相同的虚拟环境。等待他们在几个版本中更改了来自
Bolt查询的响应?如果是这样,哪一个是最新的(希望是具有适当标签和属性的那个)? -
嗯...嗯,我很难过。那么它们应该是相同的版本......好吧,我意识到我要求你“证明”你在说什么,我很抱歉,但为了完整起见,项目解释器设置的路径是什么,以及用于激活 virtualenv 并从 shell 执行的确切命令是什么?
-
@RebeccaNelson in
Pycharm解释器路径是X:\Projects\Python\HybridCart\venv\Scripts\Python而在终端上运行它时我cd X:\Projects\Python\HybridCart\venv\Scripts` and then type inactivate` 然后输入python以启动console然后只需执行导入语句,然后执行process_order()函数调用。 -
neo4j-driver的 API 最近确实发生了变化。实际上,我有一个项目的新部署,其中neo4j-driver没有固定到特定版本,并且在更新模块时它完全破坏了我的应用程序;如果我记得的话,甚至在两个次要版本号之间。作为参考,这是大约 2 周前,我最初设置的版本大约是 2 个月前。
标签: python-3.x neo4j neo4j-driver