파이썬(Python) 오라클(cxOracle) 사용시 쿼리 결과 Dictionary 로 받기
파이썬에서 오라클과 DB 연동을 할때 사용하는 cxOracle 라이브러리는 SELECT 해오는 쿼리 결과가 기본적으로 tuple형태입니다.
('kim', 27, '서울시 광진구') |
cs |
그러나 이런 형태라면 데이터를 구할때 index를 가지고 다루어야 하므로 나중에 코드를 보았을때 알아보기 힘든 형태가 됩니다.
name = row[0] #kim
age = row[1] #27
address = row[2] #서울시 광진구 |
cs |
다행히 cxOracle은 cursor의 rowfactory 라는 메서드를 오버라이딩하여 리턴받는 데이터의 형태를 바꿀 수 있습니다.
#메서드 정의
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()
...생략... |
cs |
커넥션을 연결하는 것 부터 시작한 예제 코드는 다음과 같습니다.
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() |
cs |
리턴되는 데이터는 dictinary 형태이고 그에 따라서 컬럼명을 참조하여 데이터를 얻을 수 있습니다.
{'name': 'kim', 'age': 27, 'address': '서울시 광진구'} |
cs |
컬럼명 사용
name = row['name'] #kim
age = row['age'] #27
address = row['address'] #서울시 광진구 |
cs |