apache / age

Graph database optimized for fast analysis and real-time data processing. It is provided as an extension to PostgreSQL.
https://age.apache.org
Apache License 2.0
2.87k stars 401 forks source link

Python driver: Unicode in cypher statements #1499

Open theisi opened 6 months ago

theisi commented 6 months ago

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):

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]
github-actions[bot] commented 2 months ago

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.

github-actions[bot] commented 1 week ago

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.