Python driver: Unicode in cypher statements
Describe the bug A unicode character (code point >128) in a cypher query raises the exception SqlExecutionError: InvalidEscapeSequence.
How are you accessing AGE (Command line, driver, etc.)? Python driver
What is the command that caused the error?
import age
ag = age.connect('test_graph', host="/var/run/postgresql", user="postgres")
ag.execCypher("CREATE (n:Test {name: %s})", params=('abcö',))
Expected behavior Write the unicode string to the database.
Environment (please complete the following information):
- Release 1.4.0 for PG 14
Additional context AGE expects strings encoded with Unicode UTF-16 code points in the form of \uXXXX. However, cursor.mogrify() in age.py returns UTF-8 encoded byte strings. A simple decode, encode sequence can solve the problem for low code points:
cypher = (
cursor.mogrify(cypherStmt, params)
.decode('utf-8')
.encode('unicode-escape')
.decode('utf-8')
.replace('\\x', '\\u00')
)
instead of
cypher = str(cursor.mogrify(cypherStmt, params))
cypher = cypher[2:len(cypher)-1]
This issue is stale because it has been open 45 days with no activity. Remove "Abondoned" label or comment or this will be closed in 7 days.
This issue is stale because it has been open 60 days with no activity. Remove "Abondoned" label or comment or this will be closed in 14 days.
This issue was closed because it has been stalled for further 14 days with no activity.