поддержка нескольких подключений с различной кодировкой
Есть у меня процесс на питоне, которому требуется подключаться к разным базам данных
на Оракле с различными значениями параметра 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'))
Комментариев нет:
Отправить комментарий