Форум сайта python.su
в БД кодировка :
NLS_CHARACTERSET = AL32UTF8
но cx_Oracle выдает
>>> conn.encoding
'US-ASCII'
Офлайн
Попробуй задать NLS_LANG=American_America.AL32UTF8
Офлайн
если задать неверный NLS то вы даже не законектитесь в Oracle
я вышел из положения следующим образом :
# -*- coding: utf-8 -*-
import cx_Oracle
login = ''
passwd = ''
ip = ''
port_ora = ''
bd = ''
try:
connstr = login+'/'+passwd+'@'+ip+':'+port_ora+'/'+bd
conn = cx_Oracle.connect(connstr)
cursor = conn.cursor()
except Exception, e:
print e
def to_ora_unistr(self):
tou = self.encode('unicode_escape').replace('\\u','\\')
return tou
orderno = 123465
comments = to_ora_unistr('Русская стринга')
cursor.execute('''INSERT INTO orders (orderno,comments)
VALUES (:orderno,unistr(:comments))''',
{
'orderno' : orderno,
'comments' : comments,
}
)
conn.commit()
agalenпосле нее:
Попробуй задать NLS_LANG=American_America.AL32UTF8
>>> conn.encoding
'UTF-8'
Отредактировано (Фев. 29, 2012 08:12:08)
Офлайн
agalen
Попробуй задать NLS_LANG=American_America.AL32UTF8
Офлайн
Где задается этот параметр? Как его задать?
os.environ['NLS_LANG'] = '...'
Отредактировано ziro (Авг. 16, 2012 11:52:42)
Офлайн
Получилось
import os os.environ['NLS_LANG'] = 'American_America.AL32UTF8'
Офлайн
#!/usr/bin/env python #-*-coding:utf8-*- import os os.environ["NLS_LANG"] = "Russian.AL32UTF8" #подключение def dbopen(self): try: tns = cx_Oracle.makedsn("oracle.ххх.ru",1521,"jdedb") print tns self.ora = cx_Oracle.connect('%s/%s@%s'%(self.dbuser,self.dbpwd,tns)) self.db = self.ora except Exception,e: raise RuntimeError,e.message return 1 # уже при выполнении вставки sql = u"insert into %(table)s (%(fields)s) values (%(values)s)"%{"table":self.chema+'.'+self.table,"fields":fields,"values":values} cur = db.cursor() try: cur.execute(sql.encode("cp1251")) except Exception,e: print e.__str__() print sql.encode("cp1251") raise e
Офлайн