📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Python | 2019. 3. 18. 13:12

[Python] 파이썬 오라클(cxOracle) 사용시 쿼리 결과 Dictionary 로 받기

파이썬(Python) 오라클(cxOracle) 사용시 쿼리 결과 Dictionary로 받기

파이썬에서 오라클과 DB 연동을 할 때 사용하는 cxOracle 라이브러리는 SELECT 해오는 쿼리 결과가 기본적으로 tuple 형태입니다.

('kim', 27, '서울시 광진구')

그러나 이런 형태라면 데이터를 구할 때 index를 가지고 다루어야 하므로 나중에 코드를 보았을 때 알아보기 힘든 형태가 됩니다.

name = row[0]  #kim
age = row[1]   #27
address = row[2] #서울시 광진구

다행히 cxOraclecursorrowfactory 라는 메서드를 오버라이딩하여 리턴받는 데이터의 형태를 바꿀 수 있습니다.

#메서드 정의
def makeDictFactory(cursor):

   columnNames = [d[0] for d in cursor.description]

   def createRow(*args):
      return dict(zip(columnNames, args))

   return createRow


#커서의 rowfactory로 지정
cur.rowfactory = makeDictFactory(cur)

row = cur.fetchall()

...생략...

커넥션을 연결하는 것부터 시작한 예제 코드는 다음과 같습니다.

import cx_Oracle


def makeDictFactory(cursor):
   columnNames = [d[0] for 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()

리턴되는 데이터는 dictionary 형태이고 그에 따라서 컬럼명을 참조하여 데이터를 얻을 수 있습니다.

{'name': 'kim', 'age': 27, 'address': '서울시 광진구'}

컬럼명 사용

name = row['name']  #kim
age = row['age']   #27
address = row['address'] #서울시 광진구

참고 - https://stackoverflow.com/questions/35045879/cx-oracle-how-can-i-receive-each-row-as-a-dictionary

도로락

도로락

Writer

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