Skip to content

Commit 2d5a78d

Browse files
DvirDukhanswilly22
authored andcommitted
added parameters support (#56)
* added parameters support * fixed PR comments
1 parent f7cc1a9 commit 2d5a78d

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,17 @@ result = redis_graph.query(query)
4141
# Print resultset
4242
result.pretty_print()
4343

44+
# Use parameters
45+
params = {'purpose':"pleasure"}
46+
query = """MATCH (p:person)-[v:visited {purpose:$purpose}]->(c:country)
47+
RETURN p.name, p.age, v.purpose, c.name"""
48+
49+
result = redis_graph.query(query, params)
50+
51+
# Print resultset
52+
result.pretty_print()
53+
54+
4455
# Iterate through resultset
4556
for record in result.result_set:
4657
person_name = record[0]

redisgraph/graph.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,30 @@ def flush(self):
103103
self.nodes = {}
104104
self.edges = []
105105

106-
def query(self, q):
106+
def build_params_header(self, params):
107+
assert type(params) == dict
108+
# Header starts with "CYPHER"
109+
params_header = "CYPHER "
110+
for key, value in params.items():
111+
# If value is string add quotation marks.
112+
if type(value) == str:
113+
value = quote_string(value)
114+
# Value is None, replace with "null" string.
115+
elif value is None:
116+
value = "null"
117+
params_header += str(key) + "=" + str(value) + " "
118+
return params_header
119+
120+
def query(self, q, params=None):
107121
"""
108122
Executes a query against the graph.
109123
"""
124+
if params is not None:
125+
q = self.build_params_header(params) + q
126+
110127
statistics = None
111128
result_set = None
129+
112130
response = self.redis_con.execute_command("GRAPH.QUERY", self.name, q, "--compact")
113131
return QueryResult(self, response)
114132

test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,18 @@ def test_path(self):
9494
# All done, remove graph.
9595
redis_graph.delete()
9696

97+
def test_param(self):
98+
redis_graph = Graph('params', self.r)
99+
100+
params = [1, 2.3, "str", True, False, None, [0, 1, 2]]
101+
query = "RETURN $param"
102+
for param in params:
103+
result = redis_graph.query(query, {'param': param})
104+
expected_results = [[param]]
105+
self.assertEqual(expected_results, result.result_set)
106+
107+
# All done, remove graph.
108+
redis_graph.delete()
97109

98110
if __name__ == '__main__':
99111
unittest.main()

0 commit comments

Comments
 (0)