framework : pylons 0.9.7
oracle : 10g
OS : windows XP
sqlalchemy : 0.5beta
cx_Oracle : 4.4
cx_Oracle은 ini 파일에서 sqlalchemy.convert_unicode=True 및 engine.dialect의 encoding 속성 변경만으로는 처리가 제대로 되지 않았다. 즉 항상 db에서 넘어오는 str을 unicode로 변환하지 않고 그대로 str 타입으로 application에 전달한다. 따라서 그 전까지 application에서 항상 str을 unicode로 decode 혹은 반대로 encode를 해 주어야 했다.
위의 문제는 번거롭기도 하지만 프로세싱 시간에도 좋지 않다. M. Bayer의 뉴스그룹 답글에 이를 해결하는 답이 나와있다. 환경변수의 NLS_LANG 값을 AMERICAN_AMERICA.UTF8 로 세팅하면 된다. 이전에는 KOREAN_KOREA.KO16MSWIN949로 되어 있었다.
feeding in unicode strings requires that they be encoded into bytestrings first. this can be accomplished by either the usage of the Unicode type on your Column definitions, or by sending the flag convert_unicode=True to create_engine(). the default encoding for this flag is utf-8 which can be configured by the 'encoding' flag sent to create_engine().
additionally, when using Oracle, you have to ensure that the environment variable NLS_LANG is set appropriately, such as "AMERICAN- AMERICA.UTF8".