아래는 코드
#!/usr/bin/python
# -*- coding: euc-kr -*-
import cx_Oracle
con=cx_Oracle.connect("id","passwd","SID")
f=open("oracle_sync.dat","r")
for a in f.readlines():
c=a.strip('\n') #strip을 하지 않으면 oracle_sync.dat에서 개행이 생겨버립니다.
b=c.split(",") #oracle_sync.dat에서 구분자가 ","입니다
sql="insert into V_MAIL_TBL values ('%s','%s','%s','%s');"%(b[0],b[1],b[2],b[3])
#print sql 이건 테스트코드
sqlim=con.cursor() #오라클 커서를 받습니다
sqlim.execute(sql) #커서를 받은곳에서 호출~
db.commit() # db 반영하고
con.close() # db접속 끊고
f.close() #파일 닫고
===================================================================
특정 파일을 열어서 insert하는 로직인데, 문제는 b[1]이 한글로 되어진 data입니다.
이 상태에서 insert를 넣을려고 하면 oracle charset때문에 에러가 발생이 되어집니다.
에러내용은 아래와 같습니다
cx_Oracle.DatabaseError: ORA-00911: invalid character
해볼수 있던 내용은
NLS_LANG 확인하기
system locale
python의 coding
b값에 대한 encode,decode
안되더군요...-_- 동일한 에러가 계속 발생합니다.
현재까지 원인 불명 상태로 남겨두고 있습니다.
List를 다시 변수로 빼서 작업을 해야하는건지 아니면 다른짓을 해야할지 난감합니다. 혹시 해결방안을 알고 있으신분없을까요?
=================================================================
자답합니다.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cx_Oracle
con=cx_Oracle.connect("ID","PASSWORD","SID")
sqlim=con.cursor()
sqlim.execute("delete from V_MAIL_TBL")
f=open("oracle_sync.dat","r")
for a in f.readlines():
r=a.decode('utf8')
c=r.strip('\n')
b=c.split(",")
sql="insert into V_MAIL_TBL values ('%s','%s','%s','%s')"%(b[0],b[1],b[2],b[3])
sqlim.execute(sql)
con.commit()
con.close()
f.close()
혹시나 했었던 내용이긴한데 file을 읽은 이후에 charset decode 해버리니 해결되어지는군요..-.ㅡ;;; 쩝...
서버 환경은
oracle 10g
NLS charet = NLS_LANG=KOREAN_KOREA.KO16KSC5601
LANG=ko_KR.utf8
'06. Programming > iii.Python 2.x~3.x' 카테고리의 다른 글
python + MySQLdb import 혹은 설치방법 (0) | 2011.06.01 |
---|---|
cx_Oracle 연동 (python) (0) | 2010.08.10 |
헛 파이썬 홈페이지에 블로그가 등록이 되어지다? (0) | 2010.06.19 |