파이썬(Python) 오라클(cxOracle) 사용시 쿼리 결과 Dictionary 로 받기
파이썬에서 오라클과 DB 연동을 할때 사용하는 cxOracle 라이브러리는 SELECT 해오는 쿼리 결과가 기본적으로 tuple형태입니다.
('kim', 27, '서울시 광진구')
cs


그러나 이런 형태라면 데이터를 구할때 index를 가지고 다루어야 하므로 나중에 코드를 보았을때 알아보기 힘든 형태가 됩니다.
name = row[0]  #kim
age = row[1]   #27
address = row[2#서울시 광진구
cs



다행히 cxOraclecursor의 rowfactory 라는 메서드를 오버라이딩하여 리턴받는 데이터의 형태를 바꿀 수 있습니다.
#메서드 정의
def makeDictFactory(cursor):
 
   columnNames = [d[0for d in cursor.description]
 
 
   def createRow(*args):
      return dict(zip(columnNames, args))
 
 
   return createRow
 
 
 
#커서의 rowfactory로 지정
cur.rowfactory = makeDictFactory(cur)
 
row = cur.fetchall()
 
 
...생략...
cs



커넥션을 연결하는 것 부터 시작한 예제 코드는 다음과 같습니다.
import cx_Oracle
 
 
 
 
def makeDictFactory(cursor):
   columnNames = [d[0for d in cursor.description]
 
 
   def createRow(*args):
      return dict(zip(columnNames, args))
 
 
   return createRow
 
 
 
 
conn = cx_Oracle.connect("dbuser""dbuserpasswd""localhost/test"#id, passwd, hostname/[sid 또는 servicename]
cur = conn.cursor()
cur.execute("select * from test_tbl where rownum < 2")
 
 
 
 
cur.rowfactory = makeDictFactory(cur)
 
 
rows = cur.fetchall()
 
 
for row in rows :
   print(row)
 
 
conn.close()
cs


리턴되는 데이터는 dictinary 형태이고 그에 따라서 컬럼명을 참조하여 데이터를 얻을 수 있습니다.
{'name': 'kim', 'age': 27, 'address': '서울시 광진구'}
cs


컬럼명 사용
name = row['name']  #kim
age = row['age']   #27
address = row['address'#서울시 광진구
cs




블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!