[Alex] 데이터 장인의 블로그

[Python] - 파이썬, SQL 연동하기 본문

Python

[Python] - 파이썬, SQL 연동하기

Alex, Yoon 2020. 6. 14. 00:11

< python에서 sql 연동하기 >

안녕하세요. 오늘은 python 에서 SQL 연동하는 방법을 배워보고자 합니다. 

필요한건, SQL 접속 정보와 Python에서 sql을 연동하기 위한 라이브러리 설치입니다.

제가 주로 사용하는 라이브러리는 다음과 같습니다. 


pymysql, mysql 라이브러리 - mysql 연동시 

sqlalchemy 라이브러리 - mysql 포함 다른 sql 연동 


python 에서 sql 사용을 위한 방법들을 바로 스크립트와 함께 살펴보겠습니다. 

1. 데이터 불러오기 (python에서 데이터를 호출)

  • 데이터 불러오기
import pymysql

host = '서버ip or 주소'
iid ='아이디'
pw = '비밀번호'
db_name = '데이터베이스'

conn = pymysql.connect(host=host, user= iid, password=pw, db=db_name, charset='utf8')

curs = conn.cursor(pymysql.cursors.DictCursor)

# 데이터 사용 version 1 
sql = """
SELECT  *
  FROM  TEST_TABLE
"""

curs.execute(sql)
rows = curs.fetchall()

data =pd.DataFrame(rows)

생각했던 것 보다 길고 지저분하다는 느낌을 받습니다. (이런거 별로 안좋아 합니다.) 하지만! 이렇게 커서를 활용해서 python 내에서 sql을 다뤄야하는 이유가 있습니다. 

  • 데이터 조작
import pymysql

# 데이터 수정 및 삭제 
conn = pymysql.connect(host=host, user= iid, password=pw, db=db_name, charset='utf8')
curs = conn.cursor(pymysql.cursors.DictCursor)

date = datetime.datetime.now().strftime("%Y%m%d")
sql = \
f"DELETE FROM TEST_TABLE WHERE DATE_FORMAT(operdt,'%Y%m%d') = '{date}'"
curs.execute(sql)

sql = \
f"DELETE FROM TEST_TABLE WHERE DATE_FORMAT(operdt,'%Y%m%d') = '{date}'"
curs.execute(sql)

curs.close()
conn.commit()

이처럼 데이터 조작을 위해 커서를 만들어놓고 sql 문을 실행하는 경우가 있습니다. DELETE, UPDATE 문 

 

데이터만 불러오기 위해 조금 더 간단히 스크립트를 작성하고 싶다면? 아래와 같이 작성하면 됩니다. 

  • 데이터 불러오기 version 2
import pymysql

# 데이터 사용 version 2
host = '서버ip or 주소'
iid ='아이디'
pw = '비밀번호'
db_name = '데이터베이스'

conn = pymysql.connect(host=host, 
                       user= iid, 
                       password=pw, 
                       db=db_name,
                       charset='utf8',
                       cursorclass=pymysql.cursors.DictCursor)

sql = """
SELECT  *
  FROM  TEST_TABLE
"""

pd.read_sql(sql, conn)

 

  • 데이터 불러오기 version 3
import mysql.connector

config = {
    'user': 'admin',
    'password': 'password',
    'host': '서버ip or 주소',
    'db': '데이터베이스'
}

conn = mysql.connector.connect(**config)

sql = """
SELECT  *
  FROM  TEST_TABLE
"""

data = pd.read_sql(sql=sql, con=conn)

 

  • 데이터 불러오기 version 4
from sqlalchemy import create_engine

engine = create_engine(f"mysql+mysqldb://{iid}:{pw}@{host}/{db_name}", encoding='utf-8')

sql = """
SELECT  *
  FROM  TEST_TABLE
"""

data = pd.read_sql(sql=sql, con=engine)

 

  • 데이터 입력 (INSERT 문 X)
from sqlalchemy import create_engine

engine = create_engine(f"mysql+mysqldb://{iid}:{pw}@{host}/{db_name}", encoding='utf-8')

data # python 에서 사용한 or 제작한 데이터

data.to_sql(name="테이블 이름", con=engine, if_exists='append', index = False)

insert 문 대신에 데이터를 insert 하는 경우 위의 스크립트처럼 입력할 수 있습니다. 파이썬에서 데이터를 전처리하는 경우 이 스크립트 방식을 자주 사용합니다. (아주 편리해서 좋아합니다!) 

이 밖에도 sql 종류에 따라서 import 하는 방식이 여러가지 있습니다! 자주 사용하는 mssql, mysql을 기준으로 설명드렸습니다. 궁금하신 점 혹은 다른점이 있으시다면 댓글 달아주세요! 감사합니다. 

반응형
Comments