[Python] dataframe - batch insert to db

DataFrame 데이터를 SQL 데이터베이스로 배치 인서트하는 것은 데이터를 효율적으로 이동시키는 일반적인 작업입니다. 이를 위해 Python의 pandas 라이브러리와 SQLAlchemy 또는 pandas 자체의 기능을 사용할 수 있습니다. 여기에는 몇 가지 방법이 있습니다.

  1. Pandas의 to_sql 메서드 사용
    Pandas의 DataFrame.to_sql 메서드는 DataFrame을 SQL 데이터베이스 테이블로 직접 전송할 수 있는 간편한 방법을 제공합니다.
from sqlalchemy import create_engine
import pandas as pd

# 데이터베이스 연결 생성
engine = create_engine('postgresql://username:password@host:port/database')

# DataFrame을 SQL 테이블로 인서트
df.to_sql('table_name', engine, if_exists='append', index=False)

create_engine은 SQLAlchemy를 사용하여 데이터베이스에 연결합니다.
to_sql 메서드는 DataFrame을 SQL 테이블로 인서트합니다. if_exists 옵션은 테이블이 이미 존재할 때의 동작을 정의합니다 ('append', 'replace', 'fail' 중 하나).
2. SQLAlchemy 사용하여 배치 인서트 수행
더 복잡한 시나리오에서는 SQLAlchemy의 Core나 ORM을 사용하여 배치 인서트를 수행할 수 있습니다.

from sqlalchemy import create_engine, Table, MetaData

# 데이터베이스 연결 및 메타 데이터 객체 생성
engine = create_engine('postgresql://username:password@host:port/database')
metadata = MetaData(bind=engine)

# 대상 테이블 정의
table = Table('table_name', metadata, autoload=True)

# 배치 인서트 수행
with engine.connect() as conn:
    conn.execute(table.insert(), df.to_dict(orient='records'))

이 방법은 데이터베이스에 대한 더 세밀한 제어가 필요할 때 유용합니다.

기타

if_exists 옵션은 데이터베이스에 이미 해당 테이블이 존재할 때 어떻게 동작할지 결정하는 데 사용됩니다. 이 옵션에는 세 가지 주요 값이 있습니다:

'fail':

기본값입니다.
해당 이름의 테이블이 데이터베이스에 이미 존재하는 경우, ValueError를 발생시키고 아무것도 수행하지 않습니다.
'replace':

해당 이름의 테이블이 이미 존재하는 경우, 기존 테이블을 새로운 데이터로 대체합니다.
기존 테이블이 삭제되고 새로운 데이터로 새 테이블이 생성됩니다.
'append':

해당 이름의 테이블이 이미 존재하는 경우, 새 데이터를 기존 테이블에 추가합니다.
기존 테이블 구조에 맞게 데이터가 추가되며, 테이블 구조가 다른 경우 오류가 발생할 수 있습니다.

Subscribe to Keun's Story newsletter and stay updated.

Don't miss anything. Get all the latest posts delivered straight to your inbox. It's free!
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!