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] #서울시 광진구
다행히 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()
...생략...
커넥션을 연결하는 것부터 시작한 예제 코드는 다음과 같습니다.
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
'Python' 카테고리의 다른 글
도로락
WriterIT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그