首页 > 解决方案 > 带有非英文符号的 Django sql 语句

问题描述

我有sql语句,里面有非英文符号where

sap_code变量包含俄语文本)

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
    )

我得到这样的错误django.db.utils.DatabaseError: ORA-00911: invalid character(oracle数据库)

有没有办法解决这个问题?

标签: pythonsqlpython-3.xdjango

解决方案


这是 Oracle 的限制。您将需要引用您的非 ASCII 字符。我已将您的最终片段更改为双引号,然后引用内部字符串。如果您在这里死心塌地使用原始 SQL,那应该可以解决这个问题。

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
    )

推荐阅读