How to get consistent result from procedure call in python code

I have python code querying neo4j database with procedure call, the result is not consistent.

Test 1: the following code passes company name as parameter to procedure call, that returns multiple inaccurate matches

name="SINGAPORE POWER LIMITED"
    records, summary=session.execute_read(search_entity,name)

def search_entity(tx, name):
    result = tx.run("""CALL db.index.fulltext.queryNodes('index_title', '"$name"~') """, name=name)

  values = []
  for record in result:
     values.append(record.values())
  summary = result.consume()
  return values, summary

Test 2: the code below sets the company name as literal in procedure call, that returns accurate match.

def search_entity(tx, name):
   result = tx.run("""CALL db.index.fulltext.queryNodes('index_title', '"SINGAPORE POWER LIMITED"~') """)
  values = []
  for record in result:
     values.append(record.values())
  summary = result.consume()
  return values, summary

How to change the code in Test1 to achieve the same result as in Test 2?

  • neo4j version : neo4j-community-4.2.6]
  • API / driver : Version: 5.24.0

I am not a python guy, but it seems like your parameter '$name' is within a string literal, so it would not be interpreted as a query parameter.

You are absolutely right. The issue is resolved. Thank you!

1 Like