티스토리 뷰
1. MySQL이란?
- 관계형 데이터베이스로서 데이터를 구조적으로 저장하고 관리하기 위해 사용(속도, 신뢰성)
- SQL: Structured Query Language
- 관계형 데이터베이스 관리 시스템(RDBMS) 비교
Oracle | MySQL | PostgreSQL |
- 유료 - 대규모 트랜잭션에 최적화 - 높은 학습 곡선 - 금융, 대규모 ERP, 복잡한 트랜잭션 등 |
- 무료(커뮤니티 버전) - 읽기 작업에 특화, 중소규모에 적합 - 상대적으로 쉬움 - 중소규모 웹앱, 전자상거래, 블로그 등 |
- 무료 - 대규모 데이터 및 트랜잭션에 강점 - 중간 수준 - 데이터 분석 플랫폼, 복잡한 쿼리, JSON/NoSQL과 관계형 데이터를 함께 사용 |
2. Python과 MySQL의 연동하면 좋은 점
- python을 통해 데이터를 가져와 복잡한 데이터 분석이나 변환 작업을 쉽게 수행할 수 있다.
- 동적 웹 애플리케이션을 구축할 수 있다.(예.사용자 인증 시스템, 쇼핑몰, 블로그 등)
- API와 연동: MySQL데이터를 RESTful API로 제공하거나, 외부 API 데이터를 MySQL에 저장할 수 있다.
- 스케쥴링 및 백업: python을 사용해 주기적으로 데이터를 MySQL에 업로드하거나 백업할 수 있다.
3. 라이브러리 비교
pymysql | sqlalchemy |
- 가볍기 때문에 단순한 삽입/조회 작업에서 빠르다 - SQL를 직접 작성하여 DB구조나 쿼리에 유연하게 대처 가능 - 대량 데이터 처리시 직접 반복문과 커밋 관리 필요 - 의존성 최소화가 중요할 때 |
- 대규모 데이터에 적합하며 배치 처리, 자동 커밋 기능 - SQL 작성 없이도 테이블 생성 및 관리 기능 - Pandas와 데이터프레임을 to_sql()로 저장 가능 - ORM 지원으로 객체 지향적으로 DB 모델링, 조작 가능 |
1) ORM이란? 객체(Object)와 테이블(Table)의 매핑
- 프로그래밍 언어의 클래스를 데이터베이스의 테이블과 연결(클래스의 속성은 테이블의 열(Column)과 매핑)
- 클래스의 인스턴스는 데이터베이스 테이블의 행에 해당
- 데이터를 객체 형태로 다루고, 저장/조회 시 SQL대신 ORM이 이를 처리
- 사용하는이유: SQL 쿼리 작성 없이 메서드 호출만으로 DB와 상호작용 가능하여 코드량이 감소하고 유지보수가 쉽다.
- 단점: 복잡한 쿼리나 고도로 최적화된 쿼리는 ORM이 비효율적일 수 있고, ORM이 SQL 쿼리를 생성하는 과정에서 직접 작성한 SQL보다 비효율적일 수 있다.
2) SQLAlchemy는 데이터베이스와의 연결을 관리하고 고수준 인터페이스를 제공하지만, MySQL과의 실제 연결을 위해서는 pymysql 같은 드라이버가 필요다. pymysql을 import하지 않아도 sqlalchemy가 내부적으로 pymysql을 호출하지만, 라이브러리를 설치해야 한다.
※ 주의!! password에 특수문자가 있으면 에러가 발생하므로 비밀번호를 변환해줘야한다.
- 판다스 데이터 프레임으로 mysql에 테이블 생성하고 적재, 적재한거 조회하기
import pandas as pd
import pymysql
from sqlalchemy import create_engine
from urllib.parse import quote_plus
# 적재 할 데이터 준비
df = pd.read_csv('my_data.csv')
# MySQL 연결 정보
db_username = 'root'
db_password = '비밀번호'
db_host = 'localhost'
db_port = 3306
db_name = 'db이름'
db_charset = 'utf8mb4'
# 비밀번호 URL 인코딩(비밀번호에 특수문자 있는 경우)
encoded_password = quote_plus(db_password)
# SQLAlchemy 엔진 생성
engine = create_engine(f"mysql+pymysql://{db_username}:{encoded_password}@{db_host}:{db_port}/{db_name}")
# 데이터프레임을 테이블로 생성 및 적재
df.to_sql(name="테이블이름", con=engine, if_exists='replace', index=False)
# 잘 생성되었는지 조회해보기 pymysql
my_db = pymysql.connect(
host=db_host,
port=db_port,
user=db_username,
password=db_password,
database= db_name,
charset=db_charset)
# 딕셔너리 형태로 결과 반환(데이터 프레임 쓸거라서)
cursor = my_db.cursor(pymysql.cursors.DictCursor)
# 조회 쿼리문 작성
sql = """
SELECT *
FROM 테이블이름
"""
# 쿼리 보내기
cursor.execute(sql)
# 데이터 가져오기
data = cursor.fetchall()
# 가져온 데이터 조회
print(data)
my_db.close()
'AI > AI 서비스 개발' 카테고리의 다른 글
[AI 서비스 개발] Langchain Agent, Tool (0) | 2024.11.26 |
---|---|
[AI 서비스 개발] 삼성노트북 블루투스 사라짐, 윈도우 재부팅 (1) | 2024.11.24 |
[AI 서비스 개발] 크롤링으로 데이터 수집하기(무한 스크롤 포함) (2) | 2024.11.20 |
[AI 서비스 개발] LLM 활용 사례 (1) | 2024.11.15 |
[AI 서비스 개발] 린스타트업과 MVP (2) | 2024.11.15 |
- Total
- Today
- Yesterday
- llm
- 다이어트
- ChatGPT
- 기초
- C언어
- 실기
- Ai
- SQL
- 갓생
- opic
- 습관
- 오블완
- 경제
- 30분
- 아침운동
- 루틴
- 뉴스
- 빅데이터 분석기사
- 스크랩
- 줄넘기
- Python
- 고득점 Kit
- 영어회화
- 아침
- 티스토리챌린지
- IH
- 프로그래머스
- 미라클모닝
- 운동
- 오픽
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |