파이썬에서 DB에 있는 값을 취득해 사용하기 위해 pyodbc를 사용할 수 있습니다.
pyodbc로 연동해 SELECT 문으로 취득한 데이터에 접근하기 위해 컬럼의 인덱스로 해당 컬럼에 대한 값을 취득할 수 있습니다.
또는 fetchall()을 사용할 수도 있습니다.
이번에는 판다스 dataframe에 DB에서 취득한 값을 저장하는 방법을 알아보겠습니다.
pyodbc 기본 사용 방법을 아래를 참조해주세요.
DB 취득 값 Dataframe 저장
DB에서 취득하고 싶은 내용을 작성한 쿼리를 read_sql()를 사용해 실행하면 결과값을 Dataframe 형태로 얻을 수 있습니다.
SQL Server에 아래와 같은 샘플 TEST라는 테이블을 만들어 값을 취득해보겠습니다.
import pyodbc
import pandas as pd
# 서버 주소(DB 접속ip)
server = "서버 주소"
# 접속 유저
user = "유저"
# 패스워드
pasword = "패스워드"
# 데이터베이스명
db = "데이터베이스명"
cnxn = "DRIVER={SQL Server};SERVER=" + server + ";uid=" + user + ";pwd=" + pasword + ";DATABASE=" + db
cursor = cnxn.cursor()
cnxn = pymssql.connect(server , username, password,database,autocommit = False)
cursor = cnxn.cursor()
sql = 'SELECT * FROM TEST'
df = pd.read_sql(sql, cnxn)
print(df)
cursor.close()
결과
col1 col2 col3
0 val1 val2 val3
1 data1 data2 data3
2 value1 value2 value3
read_sql()로 쿼리를 실행해 결과 값을 Dataframe으로 저장했습니다.
결과를 출력해보면 Dataframe의 컬럼명이 취득한 테이블 컬럼명으로 되었습니다.
테이블 컬럼명과 Dataframe 컬럼명이 같기 때문에 접근하기가 편해졌습니다.
반복문을 사용해 한 줄씩 값을 취득해보겠습니다.
import pyodbc
import pandas as pd
# 서버 주소(DB 접속ip)
server = "서버 주소"
# 접속 유저
user = "유저"
# 패스워드
pasword = "패스워드"
# 데이터베이스명
db = "데이터베이스명"
cnxn = "DRIVER={SQL Server};SERVER=" + server + ";uid=" + user + ";pwd=" + pasword + ";DATABASE=" + db
cursor = cnxn.cursor()
cnxn = pymssql.connect(server , username, password,database,autocommit = False)
cursor = cnxn.cursor()
sql = 'SELECT * FROM TEST'
df = pd.read_sql(sql, cnxn)
for index, row in df.iterrows():
print("col1 값 : " + row.col1)
print("col2 값 : " + row.col2)
print("col3 값 : " + row.col3)
cursor.close()
결과
col1 값 : val1
col2 값 : val2
col3 값 : val3
col1 값 : data1
col2 값 : data2
col3 값 : data3
col1 값 : value1
col2 값 : value2
col3 값 : value3
for문으로 취득한 모든 행을 한 줄씩 처리하고 있습니다.
for문에서 선언한 row에는 dataframe에 저장된 레코드를 한 줄씩 대입합니다.
한 줄씩 대입된 row에서 row.컬럼이름을 지정해 해당 컬럼에 접근이 가능합니다.
취득한 값을 가공해야 하거나 데이터 건수가 많아 Dataframe에 저장해 사용하고 싶은 경우에는 판다스 read_sql()를 사용해 직접 쿼리를 실행해 Dataframe 형태로 사용하는 것이 편리합니다.
댓글