如何使用 cypher-shell neo4j 命令从终端运行 cypher 脚本文件?

问题描述 投票:0回答:4

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

据我所知,我在 SO 上找到的所有答案都使用命令

neo4j-shell
,在我的版本(Neo4j 服务器 3.5.5)中,该命令似乎已被弃用并替换为命令
cyphershell

使用命令

sudo ./neo4j-community-3.5.5/bin/cypher-shell --help
我得到以下说明。

用法:cypher-shell [-h] [-a 地址] [-u 用户名] [-p 密码] [--加密{true,false}] [--format {auto,verbose,plain}] [--debug] [--non-interactive] [--sample-rows SAMPLE-ROWS] [--wrap {true,false}] [-v] [--驱动程序版本] [--fail-fast | --失败结束] [密码]

一个命令行 shell,您可以在其中执行 Cypher Neo4j 的实例。 默认情况下,shell 是交互式的,但您可以 通过直接在命令上传递密码来使用它来编写脚本 行或使用 cypher 语句通过管道传输文件(需要 Powershell 在 Windows 上)。

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

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)

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

sudo ./neo4j-community-3.5.5/bin/cypher-shell neo_4.cypher

首先它要求输入用户名和密码,但在输入正确的密码后(错误的密码会导致错误

The client is unauthorized due to authentication failure.
)我收到错误:

Invalid input 'n': expected <init> (line 1, column 1 (offset: 0))
"neo_4.cypher"
 ^

当我尝试使用命令进行管道传输时:

 sudo cat neo_4.cypher| sudo ./neo4j-community-3.5.5/bin/cypher-shell -u usr -p 'pwd'

没有生成输出,也没有图表。

如何使用 neo4j 命令运行 cypher 脚本文件

cypher-shell

csv neo4j terminal cypher cypher-shell
4个回答
12
投票

使用

cypher-shell -f yourscriptname
。请查看
--help
了解更多说明。


5
投票

我认为关键就在这里:

cypher-shell -- help

... Stuff deleted

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

这意味着参数是实际的密码,而不是文件名。因此,这是有效的:

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

但这不是(因为文本“neo_4.cypher”不是有效的密码查询)

cypher-shell neo_4.cypher

帮助还说:

example of piping a file:
  cat some-cypher.txt | cypher-shell

所以:

cat neo_4.cypher | cypher-shell

应该可以。可能你的问题都是 sudo 的。特别是猫... | sudo 密码外壳。 sudo 可能会保护 cypher-shell 免受某些任意输入的影响(尽管在我的系统上似乎没有这样做)。

如果您确实需要使用 sudo 来运行 cypher,请尝试使用以下命令:

sudo cypher-shell arguments_as_needed < neo_4.cypher

哦,另外,您的脚本没有返回,因此它可能不会显示任何数据,但您仍然应该看到已加载记录的摘要报告。

也许首先尝试一些更简单的方法,例如在脚本中进行简单的 match ... return ... 查询。

哦,不要忘记用分号终止密码查询!


3
投票

问题出在 cypher 文件中:每行应该以分号结尾:

;
。我仍然需要
sudo
来运行该程序。

从书中获取的文件实际上似乎还包含其他错误。


0
投票

Windows 上的 NEO4J 服务器 从 cmd 调用 cypher-shell 当我输入 MATCH (a) return a; 仅回显“return”中的“n”,没有任何反应 不能做:退出 尝试输入 a.cql | cypher-shell,文件格式为 utf-8、ansi、utf-16。 没什么。

??? 谢谢, 沙洛姆·埃尔金

© www.soinside.com 2019 - 2024. All rights reserved.