728x90
반응형
- pymysql
파이썬에서 SQL DB에 접속할 때 사용하는 패키지 입니다.
pymysql이 설치되어 있지 않은 경우 다음과 같이 설치하면 됩니다.
# window, mac
pip install pymysql
# conda
conda install pymysql
- SQL에서 데이터 불러오기
import pymysql
con = pymysql.connect(
user = 'root', # 사용자명
passwd = '1234', # 비밀번호
host = '127.0.0.1', # 허용 접속 IP. 일반적으로 localhost는 127.0.0.1
db = 'shop', # 사용할 데이터베이스
charset = 'utf8' # 인코딩 방법
)
# 로컬 DB 뿐만 아니라 aws와 같은 클라우드도 연결 가능
mycursor = con.cursor() # 데이터베이스의 커서 객체를 가져옴.
# 커서란 화면에서 현재 사용자의 위치를 나타내며 깜빡거리는 막대기.
# 데이터베이스에서도 데이터 중에서 특정 위치, 특정 행을 가르킬 때 커서가 사용됨. 즉,여기서는 커서란 현재 작업 중인 행을 나타내는 객체.
query = """
select * from goods;
"""
mycursor.execute(query) # SQL 쿼리를 데이터베이스 서버에 보냄.
data = mycursor.fetchall() # 서버로부터 데이터를 가져옴.
con.close() # 작업을 마친 후 데이터베이스와 연결을 종료
- SQL에 데이터 저장하기
import pymysql
con = pymysql.connect(
user = 'root',
passwd = '1234',
host = '127.0.0.1',
db = 'shop',
charset = 'utf8'
)
mycursor = con.cursor()
query = """
insert into goods (goods_id, goods_name, goods_classify, sell_price, buy_price, regis1ter_date)
values ('0009', '스테이플러', '사무용품', '2000', '1500', '2020-12-30');
"""
mycursor.excute(query)
con.commit() # 삽입, 갱신, 삭제 등 DML(Data Manipulation Language)문장을 실행하는 경우 commit 메서드를 사용하여 데이터의 학정 갱신하는 작업을 실행
con.close()
- pandas를 이용하여 SQL 데이터 읽기 및 쓰기
위와 같은 방법을 사용했을 때는 튜플형태로 데이터를 읽어오고, 열 이름도 보이지 않기에 pandas를 이용하여 데이터프레임 형태로 SQL로 데이터를 읽고 쓸 수 있습니다.
- 데이터 읽어오기
import pandas as pd
from sqlalchemy import create_engine # pandas에서 SQL에 연결할 때는 SQLalchemy ORM을 사용합니다.
# ORM(Obejct Relational Mapping): 어플리케이션과 데이터베이스를 연결할 때, SQL 언어가 아닌 어플리케이션 개발언어로 데이터베이스를 접근할 수 있게 해주는 툴
# engine = create_engine('mysql+pymysql://[사용자명]:[비밀번호]@[호스트:포트]/[사용할 데이터베이스]')
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/shop')
query = """select * from goods;"""
goods = pd.read_sql(query, con = engine) # read_sql(쿼리, 연결정보)를 통해 데이터프레임 형태로 데이터를 불러옴
engine.dispose() # 연결 종료
- 데이터 쓰기
import pandas as pd
from sqlalchemy import create_engine
import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/shop')
iris.to_sql(name = 'iris', con = engine, index = False, if_exists = 'replace') # 데이터프레임.to_sql(테이블 이름, 연결정보, index)을 통해 데이터프레임을 데이터베이스에 저장.
# index = False로 해야 인덱스를 생성하지 않습니다.
# if_exists = 'replace'를 입력하면 해당 테이블이 존재할 시 데이터를 덮어씁니다.
engine.dispose()
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[Python] Selenium을 이용한 동적 크롤링 (1) | 2023.12.29 |
---|---|
[Python] 크롤링(Crawling) (1) | 2023.12.29 |
[Python] ValueError: invalid literal for int() with base 10: '1.70 (0) | 2023.12.29 |
[Python] 데이터 시각화(matplotlib, pandas, seaborne) (0) | 2023.12.29 |
[Python] Pandas package -2 (0) | 2023.12.29 |