I have sql statement, with non english symbols in where
(sap_code
variable contains russian text)
x
sap_code = 'ОВОЩИ – ФРУКТЫ'
sql_string = 'SELECT '
'SAP_CODE, '
'SKU, '
'FROM INFO '
f'WHERE ROWNUM < {settings.NQ_SQL_LIMIT}'
if sap_code:
sql_string += f' AND SAP_CODE = {sap_code}'
with connections[db].cursor() as cursor:
exec_result = cursor.execute(
sql_string
)
And I get such error django.db.utils.DatabaseError: ORA-00911: invalid character
(oracle database)
Is there any way to fix that?
Advertisement
Answer
This is an Oracle limitation. You will need to quote your non-ASCII characters. I’ve changed your final fragment to double quotes and then quoted the internal string. That should resolve this issue if you’re dead-set on using raw SQL here.
sap_code = 'ОВОЩИ – ФРУКТЫ'
sql_string = 'SELECT '
'SAP_CODE, '
'SKU, '
'FROM INFO '
f'WHERE ROWNUM < {settings.NQ_SQL_LIMIT}'
if sap_code:
sql_string += f" AND SAP_CODE = '{sap_code}'"
with connections[db].cursor() as cursor:
exec_result = cursor.execute(
sql_string
)