首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cypher neo4j命令从终端运行密码脚本文件?

如何使用cypher neo4j命令从终端运行密码脚本文件?
EN

Stack Overflow用户
提问于 2019-05-08 10:30:11
回答 3查看 11.2K关注 0票数 9

我有一个密码脚本文件,我想直接运行它。

据我所知,我能够找到的所有答案都使用命令neo4j-shell,在我的版本(Neo4j服务器3.5.5)中,该命令似乎被废弃,并被命令cyphershell取代。

使用命令sudo ./neo4j-community-3.5.5/bin/cypher-shell --help,我得到了以下说明。

使用方法: cypher-shell -h -u用户名-加密{true,false} --调试--示例行示例- -v -失败-快速-失败-在端 一个命令行shell,您可以在其中对Neo4j实例执行Cypher。默认情况下,shell是交互式的,但您可以使用它直接在命令行上传递密码,也可以使用cypher语句(Windows上需要Powershell )来编写脚本。

我的文件如下所示,它试图从csv文件创建一个图形,它来自于“图算法”一书。

代码语言:javascript
复制
WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data" AS base 
WITH base + "transport-nodes.csv" AS uri
LOAD CSV WITH HEADERS FROM uri AS row
MERGE (place:Place {id:row.id})
SET place.latitude = toFloat(row.latitude),
  place.longitude = toFloat(row.latitude),
  place.population = toInteger(row.population)

WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data/" AS base 
WITH base + "transport-relationships.csv" AS uri
LOAD CSV WITH HEADERS FROM uri AS row
MATCH (origin:Place {id: row.src})
MATCH (destination:Place {id: row.dst})
MERGE (origin)-[:EROAD {distance: toInteger(row.cost)}]->(destination)

当我试图用命令直接传递文件时:

代码语言:javascript
复制
sudo ./neo4j-community-3.5.5/bin/cypher-shell neo_4.cypher

首先,它询问用户名和密码,但是在输入正确的密码(错误的密码导致错误的The client is unauthorized due to authentication failure.)之后,我得到了错误:

代码语言:javascript
复制
Invalid input 'n': expected <init> (line 1, column 1 (offset: 0))
"neo_4.cypher"
 ^

当我尝试使用命令时:

代码语言:javascript
复制
 sudo cat neo_4.cypher| sudo ./neo4j-community-3.5.5/bin/cypher-shell -u usr -p 'pwd'

不生成输出,也不生成图形。

如何使用neo4j命令cypher-shell运行密码脚本文件

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-08 11:16:12

问题在于密码文件:每一行都应该以分号结束:;。我仍然需要sudo来运行这个程序。

实际上,从书中取出的文件似乎也包含其他错误。

票数 2
EN

Stack Overflow用户

发布于 2020-07-18 14:06:31

使用cypher-shell -f yourscriptname。有关更多描述,请与--help联系。

票数 9
EN

Stack Overflow用户

发布于 2019-05-08 10:44:41

我想关键在这里:

代码语言:javascript
复制
cypher-shell -- help

... Stuff deleted

positional arguments:
  cypher                 an optional string of cypher to execute and then exit

这意味着pare测量仪是实际的密码代码,而不是文件名。因此,这样做是可行的:

代码语言:javascript
复制
GMc@linux-ihon:~> cypher-shell "match(n) return n;"
username: neo4j
password: ****
+-----------------------------+
| n                           |
+-----------------------------+
| (:Job {jobName: "Job01"})   |
| (:Job {jobName: "Job02"})   |

但事实并非如此(因为文本"neo_4.cypher“不是一个有效的密码查询)

代码语言:javascript
复制
cypher-shell neo_4.cypher

帮助还说:

代码语言:javascript
复制
example of piping a file:
  cat some-cypher.txt | cypher-shell

所以:

代码语言:javascript
复制
cat neo_4.cypher | cypher-shell

应该行得通。你的问题可能是所有的问题。特别是猫. sudo密码壳。sudo有可能保护密码壳不受某些任意输入的影响(尽管在我的系统上似乎没有这样做)。

如果您确实需要使用sudo来运行密码,请尝试使用以下方法:

代码语言:javascript
复制
sudo cypher-shell arguments_as_needed < neo_4.cypher

哦,而且,您的脚本没有返回,所以它可能不会显示任何数据,但是您仍然应该看到加载的记录摘要报告。

也许先尝试一些简单点的东西,比如简单的匹配.回来..。在您的脚本中查询。

哦,别忘了用分号终止密码查询!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56038659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档