Вставьте panda df в базу данных Oracle, используя python - PullRequest
1 голос
/ 27 февраля 2020

У меня есть панда данных с текстовыми столбцами ('testdf'). Я использую приведенный ниже код для вставки в таблицу TEST в oracle database

from sqlalchemy import create_engine, Unicode, NVARCHAR
engine = create_engine("oracle+cx_oracle://{user}:{pw}@xxxxx.xxxxx.xx:1521/{db}"
                       .format(user="xxx",
                               pw="xxx",
                               db="xx"))
testdf.to_sql("TEST", con = engine, if_exists = 'append')

Но она возвращает ошибку с кодировкой, как показано ниже:

UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f447' in position 237: character maps to <undefined>

Как я могу решить эту проблему ? Я использую Python 3, ноутбук Jupyter с Anaconda

1 Ответ

1 голос
/ 27 февраля 2020

Это общий вопрос. Я думаю этот ответ хороший . Или этот .

Проблема в том, что Python пытается преобразовать ваши данные (которые кодируются в Unicode) в какой-то другой набор символов для вставки в базу данных, и этот другой набор символов не включает \U0001f447 (который находится в вашем фрейме данных). Этот ответ указывает на то, что если вы посмотрите на полную трассировку ошибок , а не только на сообщение об ошибке, он скажет вам, в какую кодировку он пытается преобразовать.

Есть несколько различных вариантов. Возможно, проще всего передать ?charset=utf8 в cx_ oracle в вашей строке подключения. Это говорит cx_ oracle отправлять строки как Unicode.

"oracle+cx_oracle://{user}:{pw}@xxxxx.xxxxx.xx:1521/{db}?charset=utf8"

Вы также можете попробовать установить переменную среды NLS_LANG . Это скажет серверу Oracle ожидать Unicode от вашего приложения Python.

os.environ['NLS_LANG']= 'AMERICAN_AMERICA.AL32UTF8'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...