728x90
[Pandas] SQL 쿼리로 데이터프레임으로 불러오기 (read_sql)
`read_sql`은 SQL 쿼리의 결과를 Pandas 데이터 프레임으로 불러오는 방법을 제공한다.
데이터베이스의 데이터를 직접 조작하고 시각화할 때 주로 사용한다.
read_sql()
일반적으로 SQLAlchemy 엔진 또는 데이터베이스 커넥션 객체(sqlite3)와 함께 사용된다.
이 함수는 `SELECT` 쿼리 뿐만 아니라 테이블 전체를 가져오는 기능도 지원한다.
import pandas as pd
df = pd.read_sql(sql, con)
SELECT 쿼리를 실행하여 DataFrame으로 불러오기
이 포스팅에선 `SQLAlchemy` 엔진을 생성하여 쿼리를 실행하고 데이터프레임으로 불러온다.
먼저 SQLAlchemy 패키지를 설치후 엔진을 생성한다.
##패키지 없으면 설치##
pip insqll sqlalchemy
#####################
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://username:password@host:port/database")
그 후 SQL 쿼리를 작성하여 결과 값을 데이터 프레임으로 변환한다.
import pandas as pd
query = '''
SELECT
id,
name,
age,
created_at
FROM
users
WHERE
age > 30
'''
# SQL 쿼리 실행 후 DataFrame으로 변환
df = pd.real_sql(sql=query, con=engine)
테이블 전체 불러오기
`read_sql()`은 SQL 쿼리뿐 아니라테이블 이름으로도 데이터를 불러올 수 있다.
다만 테이블 이름을 직접 넘길 경우, 일부 데이터베이스에는 에러가 발생할 수 있다.
df = pd.read_sql(sql='users', con=engine)
WHERE 조건절에 매개변수 사용하기
`read_sql()`은 파라미터를 동적으로 바인딩할 수 있는 기능도 지원한다.
해당 기능을 사용하면 조건을 외부에서 동적으로 제어가 가능하다.
age_threshold = 30
query = '''
SELECT
id,
name,
age,
created_at
FROM
users
WHERE
age > :age_threshold
'''
# 매개 변수 전달 (params 인자)
df = pd.read_sql(sql=query, con=engine, parmas={"age_threshole":age_threshold})
특정 컬럼을 인덱스로 불러오기
`index_col` 매개변수로 인덱스 컬럼을 지정할 수도 있다.
df = pd.read_sql(sql=query, con=engine, index_col='id')
성능 최적화
chunksize 사용
대용량 데이터를 한꺼번에 불러오는 대신, 청크 단위로 불러올 수 있다.
`read_sql()`의 `chunksize` 매개변수를 설정하면, 지정된 크기 만큼의 데이터만 한 번에 불러온다.
chunk_size = 1000 # 1000개씩 불러오기
# chunksize를 지정하면, df는 반복 가능한 generator로 반환한다.
for chunk in pd.read_sql(sql=query, con=engine, chunksize=chunk_size):
print(f"chunk 크기: {len(chunk)}")
print(chunk.head())
반응형
'👩💻 Develope > Python' 카테고리의 다른 글
[Pandas] 데이터프레임 컬럼 순서 변경하기 (0) | 2025.01.06 |
---|---|
[Pandas] 결측값 처리 (0) | 2024.12.19 |
[Python] Tabulate (0) | 2024.12.05 |
[Python] Asyncio (0) | 2024.11.13 |
[Python] 동시성 프로그래밍 (2) 코루틴(Coroutine) (1) | 2024.11.12 |