Python pyodbc 검색 결과 dataframe 저장 read_sql 사용 방법

파이썬에서 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 형태로 사용하는 것이 편리합니다.

댓글