Не может Вставить Unicode Используя cx-Oracle

У меня есть проблема, вставляющая unicode в схему Oracle, я думаю, что база данных - случай Oracle 11g, но не бесспорная в этом пункте. Я использую питона 2.6.1 на OS X 10.6.8 (это - системная версия питона), и использую версию модуля 5.1 водителя cx-Oracle, загруженную с sourceforge.net, построенного и установленного на virtualenv 1.6.1 случаев с видимыми пакетами места. Мой сценарий следующие

  import cx_Oracle

  connection = cx_Oracle.connect(
      "/@/"
      )
  cursor = connection.cursor()
  result = cursor.execute(u"create table UNICODE_TEST (id NUMBER(6), text NCLOB not NULL)")

  raw_text = open("test.txt",'r').read()
  if isinstance(raw_text,str):
      raw_text = raw_text.decode("utf_8")

  statement = u"insert into UNICODE_TEST (id, text) values (1,'%s')" % raw_text
  result = cursor.execute(statement)

Я создаю связь, создаю курсор, выполняю statment, чтобы составить испытательную таблицу с id и текстовым полем ЧИСЛА типов и NCLOB. Я открываю файл, содержащий, что я знаю, чтобы быть текстом, закодированным в UTF-8, расшифруйте последовательность к unicode. Создайте вставку statment в unicode, натягивают и выполняют то заявление, и результат - эта ошибка.

  Traceback (most recent call last):
    File "unicode-test.py", line 19, in 
      result = cursor.execute(statement)
  UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 170: ordinal not in range(128)

Что-то пытается закодировать мое заявление как ASCII прежде, чем вставить его в схему Oracle. Таким образом, я начал охотиться вокруг того, чтобы смотреть, лучше понимают, как cx-Oracle обращается с unicode и нашла это в HISTORY.txt источника cx-Oracle, который я загрузил с sourceforge.net

Изменения от 5.0.4 до 5.1
1) Удалите поддержку способа UNICODE и разрешите Unicode пройтись в везде последовательность может быть передана в. Это означает, что последовательности будут переданный до Oracle, используя ценность окружающей среды NLS_LANG переменная в Пайтоне 3.x также. Выполнение этого устранило связку проблем это было обнаружено при помощи способа UNICODE и также удалило ненужное ограничение в Пайтоне 2.x, в котором не мог использоваться Unicode, соединяет последовательности или SQL-операторы, например. ...

Мое предположение - то, что переменная окружения NLS_LANG установлена в 'ASCII' или некоторый эквивалент, таким образом, я пытаюсь установить NLS_LANG в 'AL32UTF8', которому я верю, правильное значение для unicode и устанавливает новое значение прежде, чем создать мою связь.

  os.environ["NLS_LANG"] = "AL32UTF8"
  connection = cx_Oracle.connect(
      "/@/"
      )
  cursor = connection.cursor()
  ...

Но я получаю эту ошибку.

  Traceback (most recent call last):
    File "unicode-test.py", line 11, in 
      "/@/"
  cx_Oracle.DatabaseError: ORA-12705: Cannot access NLS data files or invalid environment specified

Таким образом, похоже, что я не могу вмешаться в стоимость NLS_LANG.

Вот мои вопросы на данный момент. Я пропускаю что-то простое как неправильный тип столбца? Проблема с водителем cx-Oracle? Я должен установить переменную окружения "WITH_UNICODE", строя модуль cx-Oracle и как я сделал бы это? Проблема со случаем Oracle? Я имею небольшой опыт с Oracle и никогда не работал с Oracle и питоном вместе. Я имею, проводят два дня, работая над этой проблемой и хотел бы лучшее понимание того, что - проблема, прежде чем я пойду к группе DBA с.

Спасибо,

16
nl ja de

1 ответы

Урегулирование переменной окружения является правильным путем, но "AL32UTF8" не правильная стоимость для NLS_LANG. Чтобы получить правильную ценность NLS_LANG, используемого в вашем случае Oracle, выполнить

SELECT USERENV ('language') FROM DUAL  
15
добавлено
Моим результатом вышеупомянутого вопроса является AMERICAN_AMERICA.WE8MSWIN1252. @davidjb, как вы устанавливаете его в ту стоимость без кавычек. Что вы импортировали в свой объем, чтобы получить его?
добавлено автор ThatAintWorking, источник
Я нашел эта страница у которого был код как os.environ ["NLS_LANG"] = ".AL32UTF8" , и это добилось цели для меня. Отметьте ведущую точку, но не подчеркните.
добавлено автор ThatAintWorking, источник
В моей ситуации, мой результат вышеупомянутого вопроса, являющегося "AMERICAN_AMERICA.US7ASCII". Однако мои вставки Unicode начали работать правильно, как только мой NLS_LANG был установлен в "_.AL32UTF8" (без кавычек).
добавлено автор davidjb, источник
Спасибо за ответ я наконец получил ответ от своего DBAs. Для нашего 11gR2 установка НАБОР СИМВОЛОВ - ' WE8MSWIN1252' и НАБОР НАЦИОНАЛЬНОГО ХАРАКТЕРА - ' AL16UTF16'. кажется, что водитель не обнаруживает кодирование, начинаются вышеупомянутые переменные правильно. Проверка ' encoding' и ' nencoding' признаки на связи приводят к ' американский ASCII\U 0026\\U 0023\39; в обоих случаях, который является неправильным. Я все еще получаю тот же самый DatabaseError, пробуя к NLS_LANG к ' AL16UTF16' который, так как моя связь со схемой, удаляют (и будет работать также), объясняет, почему к тем файлам нельзя получить доступ.
добавлено автор snarkyname77, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Oracle RU
Oracle RU
303 участник(ов)

Русскоязычная группа по Oracle. — Архитектура СУБД — PL/SQL — Оптимизация — Администрирование — Вакансии Oracle (указать инфу по вилке ЗП и удалёнке) Приглашайте коллег :-) Запрещены: личные оскорбления, обсуждения оффтопик вопросов политики и религии

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community