개발
SQLAlchemy와 psycopg2 중 어느 것을 사용할까?
31514
2025. 3. 6. 14:45
Pandas 데이터프레임을 Postgres 테이블에 적재하는 작업을 하면서 고민했던 내용에 대해 정리한 글이다.
데이터프레임을 Postgres 테이블에 적재하는 방법에는 여러 가지가 있지만, 그 중에서도 SQLAlchemy 라이브러리와 psycopg2 드라이버를 비교하려고 한다.
SQLAlchemy
SQLAlchemy는 ORM이자 DB API 역할을 하는 라이브러리이며, `create_engine()`을 사용하여 데이터베이스 연결을 관리한다.
Connection Pool을 관리하여 재사용 가능한 DB 연결을 제공하고, `pandas.to_sql()`을 사용하여 데이터프레임을 테이블에 쉽게 적재할 수 있다.
하지만 ORM이기 때문에 직접 SQL을 실행하는 psycopg2보다 다소 느릴 수 있다.
psycopg2
psycopg2는 PostgreSQL 전용 파이썬 드라이버로, 직접 데이터베이스와 연결하여 SQL을 실행할 수 있다.
트랜잭션을 제어할 수 있으며, `COPY FROM`과 같은 명령어로 대용량의 데이터를 빠르게 적재할 수 있다.
나는 무엇을 사용해야 할까?
나의 상황은 이미 만들어진 데이터프레임을 테이블에 적재하는 상황이고, 데이터의 양도 많지 않다.
psycopg2에서 `COPY FROM`을 사용하려면 데이터프레임을 CSV 파일로 변환해야 하고, `executemany()`를 사용하려면 리스트로 변환해야 한다.
따라서 이러한 변환 작업을 하지 않고 바로 적재할 수 있는 SQLAlchemy의 `to_sql()`를 사용하는 것이 더 좋다고 판단했다.
# SQLAlchemy용 엔진 생성 (psycopg2를 기반으로)
engine = create_engine(
f"postgresql+psycopg2://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}",
isolation_level="AUTOCOMMIT"
)
# 데이터를 PostgreSQL 테이블에 삽입
df_to_insert.to_sql("t_pole", engine, if_exists="append", index=False, method="multi", schema="tra")