Neo4j & Cypher: Parameterized Queries and neo4j-shell
Join the DZone community and get the full member experience.
Join For FreeEvery now and then I get sent Neo4j cypher queries to look at, and more often than not they’re parameterised, which means you can’t easily run them in the Neo4j browser.
For example let’s say we have a database which has a user called ‘Mark’:
CREATE (u:User {name: "Mark"})
Now we write a query to find ‘Mark’ with the name parametrized so we can easily search for a different user in future:
MATCH (u:User {name: {name}}) RETURN u
If we run that query in the Neo4j browser we’ll get this error:
Expected a parameter named name Neo.ClientError.Statement.ParameterMissing
If we try that in neo4j-shell we’ll get the same exception to start with:
$ MATCH (u:User {name: {name}}) RETURN u; ParameterNotFoundException: Expected a parameter named name
However, as Michael pointed out to me, the neat thing about neo4j-shell is that we can define parameters by using the export command:
$ export name="Mark" $ MATCH (u:User {name: {name}}) RETURN u; +-------------------------+ | u | +-------------------------+ | Node[1923]{name:"Mark"} | +-------------------------+ 1 row
export is a bit sensitive to spaces so it’s best to keep them to a minimum. e.g. the following tries to create the variable ‘name ‘ which is invalid:
$ export name = "Mark" name is no valid variable name. May only contain alphanumeric characters and underscores.
The variables we create in the shell don’t have to only be primitives. We can create maps too:
$ export params={ name: "Mark" } $ MATCH (u:User {name: {params}.name}) RETURN u; +-------------------------+ | u | +-------------------------+ | Node[1923]{name:"Mark"} | +-------------------------+ 1 row
A simple tip but one that saves me from having to rewrite queries all the time!
Published at DZone with permission of Mark Needham, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Trending
-
Implementing a Serverless DevOps Pipeline With AWS Lambda and CodePipeline
-
Auditing Tools for Kubernetes
-
Power BI Report by Pulling Data From SQL Tables
-
Leveraging FastAPI for Building Secure and High-Performance Banking APIs
Comments