Проблема с SELECT из базы данных при использовании символа Юникод - PullRequest
3 голосов
/ 20 марта 2019

Я использую последнюю версию Python и фреймворк для роботов с DatabaseLibrary (https://franz -see.github.io / Robotframework-Database-Library / api / 1.0.1 / DatabaseLibrary. HTML )

И у меня проблема с SELECT из базы данных, когда я пытаюсь использовать Unicode-символ, подобный этому: выберите * из labcamprodfull, где PRODUCTNAME, например, '% ščť %'

Затем я выполняю / запускаю тест и получаю эту ошибку: UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xae» в позиции 54: порядковый номер не в диапазоне (128)

Вот мой код:

*** Settings ***
Resource  ../globalVariables.robot
Library  DatabaseLibrary

*** Variables ***
${DB_LOAD_CONNECT_STRING} =  '${userLoad}/${passwordDb}@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=${hostnameDb})(PORT=${portDb}))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=${sid})))'
${originalSpecialCharacter}  ®

*** Test Cases ***
Validate_if_special_character_Original_symbol_is_correctly_saved_in_database

    ${byte_string}=  Encode String To Bytes     ${originalSpecialCharacter}  UTF-8
    log to console  bytes is
    log to console  ${byte_string}
    ${_string} =  Decode Bytes To String  ${byte_string}  UTF-8
    log to console  encoded string is
    log to console  ${_string}

    Connect To Database Using Custom Params  cx_Oracle  ${DB_LOAD_CONNECT_STRING}
        ${rowCount}  Row Count  select * from labcamprodfull where PRODUCTNAME like '%${_string}%'
        log to console  Product count with original symbol in name is
        log to console  ${rowCount}
    Disconnect from database

Затем я выполняю / запускаю тест и получаю эту ошибку: UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xae» в позиции 54: порядковый номер не в диапазоне (128)

1 Ответ

1 голос
/ 20 марта 2019

Кодировка по умолчанию для cx_Oracle действительно ASCII.Если вы можете установить кодировку для соединения при создании, все должно быть хорошо.С базовым cx_Oracle это будет сделано следующим образом:

cx_Oracle.connect(user, password, dsn, encoding="UTF-8", nencoding="UTF-8")

Я не уверен, как это сделать с помощью инструмента, который вы используете, но, надеюсь, этого будет достаточно, чтобы вы начали.

Другой вариант - установить переменную среды NLS_LANG, как в

export NLS_LANG=.AL32UTF8

, а затем запустить приложение.

...