Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 네트워크
- git 기본명령어
- 앙상블
- BFS
- airflow 정리
- Linux
- CF
- Decision Tree
- 배깅
- Collaborative filtering
- 리눅스 환경변수
- Spark Data Read
- 데이터분석
- Oracle 논리적 저장 구조
- 통계분석
- 추천시스템
- eda
- Spark jdbc parallel read
- 오라클 데이터 처리방식
- git stash
- enq: FB - contention
- 알고리즘
- Spark 튜닝
- Python
- 데이터 분석
- SQL
- Oracle ASSM
- 랜덤포레스트
- git init
- 의사결정나무
Archives
- Today
- Total
[Alex] 데이터 장인의 블로그
[Python] - 파이썬, SQL 연동하기 본문
< 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을 기준으로 설명드렸습니다. 궁금하신 점 혹은 다른점이 있으시다면 댓글 달아주세요! 감사합니다.
반응형
'Python' 카테고리의 다른 글
[Python] 데코레이터(Decorator) 사용하기 (0) | 2021.12.26 |
---|---|
[Python] python 라이브러리 오프라인 설치 (feat.pip) (0) | 2021.12.22 |
[Python] - 암호화 라이브러리 hashlib (0) | 2021.01.05 |
[Python] - Selenium, webdriver 을 활용한 상가업소 폐점여부 데이터 크롤링 (9) | 2020.06.07 |
[Python] - 공공데이터 api 크롤링(날씨데이터 수집) (2) | 2020.04.25 |
Comments