среда, 4 сентября 2013 г.

ORACLE XE NLS

поддержка нескольких подключений с различной кодировкой

Есть у меня процесс на питоне, которому требуется подключаться к разным базам данных
на Оракле с различными значениями параметра NLS_CHARACTERSET values.

Я могу установить соответствующий набор символов, задавая переменную окружения
NLS_LANG или из командной строки операционной системы или из программы перед тем как 
поключаться к базе. Для баз данных с кодировкой utf-8, я устанавливаю 
"AMERICAN_AMERICA.UTF8", для Latin-1 (ISO-8859-1) я устанавливаю 
"AMERICAN_AMERICA.WE8ISO8859P1".

Дальше показан примерный код:

import os
import cx_Oracle

os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'
utf8_conn = cx_Oracle.connect('dana', 'pw', 'utf8db')
print utf8_conn.encoding
 
s = utf8_conn.cursor().execute('SELECT :s AS str FROM dual',
      s=u'd\u00e4t\u00e4').fetchone()[0]
print s, type(s), len(s), len(s.encode('utf8'))

utf8_conn.close()

os.environ['NLS_LANG'] ='AMERICAN_AMERICA.WE8ISO8859P1'
latin1_conn = cx_Oracle.connect('dana', 'pw', 'latin1db')
print latin1_conn.encoding
s = latin1_conn.cursor().execute('SELECT :s AS str FROM dual',
      s='d\xe4t\xe4').fetchone()[0].decode('latin1')
print s, type(s), len(s), len(s.encode('latin1'))

Комментариев нет:

Отправить комментарий

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога