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을 기준으로 설명드렸습니다. 궁금하신 점 혹은 다른점이 있으시다면 댓글 달아주세요! 감사합니다.
반응형