SQLAlchemy를 사용하여 Pandas DataFrame를 대량 삽입하는 방법
SQLAlchemy를 사용하여 Pandas DataFrame를 대량 삽입하는 방법
이 가이드에서는 SQLAlchemy를 사용하여 Pandas DataFrame을 데이터베이스에 대량 삽입하는 방법을 설명합니다. SQLAlchemy는 다양한 데이터베이스 백엔드를 지원하는 Python ORM(Object-Relational Mapping) 라이브러리입니다. Pandas는 데이터 분석 및 조작을 위한 강력한 Python 라이브러리입니다.
요구 사항
- Python 3
- SQLAlchemy
- Pandas
- SQL Server (또는 다른 지원되는 데이터베이스)
단계
- 데이터베이스 연결 설정
from sqlalchemy import create_engine
# SQL Server 연결 문자열
connection_string = "mssql+pyodbc://localhost/mydb?driver=SQL+Server"
# 엔진 생성
engine = create_engine(connection_string)
- Pandas DataFrame 생성
import pandas as pd
# 예시 데이터
data = {
"name": ["John", "Jane", "Alice"],
"age": [20, 25, 30],
"city": ["New York", "London", "Paris"],
}
# DataFrame 생성
df = pd.DataFrame(data)
- DataFrame 삽입
# DataFrame을 테이블에 삽입
df.to_sql("users", engine, if_exists="replace")
설명
to_sql()
메서드는 Pandas DataFrame을 데이터베이스 테이블에 삽입하는 데 사용됩니다.- 첫 번째 인수는 테이블 이름입니다.
- 두 번째 인수는 데이터베이스 연결 엔진입니다.
if_exists
인수는 테이블이 이미 존재할 때 수행할 작업을 지정합니다.- "replace": 기존 테이블을 새 데이터로 대체합니다.
- "append": 새 데이터를 테이블 끝에 추가합니다.
- "fail": 테이블이 존재하면 오류를 발생시킵니다.
예제 코드
from sqlalchemy import create_engine
import pandas as pd
# SQL Server 연결 문자열
connection_string = "mssql+pyodbc://localhost/mydb?driver=SQL+Server"
# 엔진 생성
engine = create_engine(connection_string)
# 예시 데이터
data = {
"name": ["John", "Jane", "Alice"],
"age": [20, 25, 30],
"city": ["New York", "London", "Paris"],
}
# DataFrame 생성
df = pd.DataFrame(data)
# DataFrame을 테이블에 삽입
df.to_sql("users", engine, if_exists="replace")
- 이 코드는 SQL Server 데이터베이스에 "users"라는 테이블에 Pandas DataFrame을 삽입합니다.
- 테이블이 이미 존재하면 기존 테이블을 새 데이터로 대체합니다.
변경 사항
- 필요에 따라 연결 문자열, 테이블 이름, 데이터 및
if_exists
인수를 변경하십시오.
SQLAlchemy를 사용하여 Pandas DataFrame를 대량 삽입하는 대체 방법
# SQL 삽입 쿼리
query = """
INSERT INTO users (name, age, city)
VALUES (:name, :age, :city)
"""
# 쿼리 실행
engine.execute(query, df.to_dict(orient="records"))
executemany()
메서드는 여러 개의 데이터 행을 한 번에 삽입하는 데 사용됩니다.- 쿼리에서
:name
,:age
,:city
는 데이터베이스 열 이름을 나타냅니다. to_dict(orient="records")
메서드는 DataFrame을 딕셔너리 목록으로 변환합니다.
bulk_insert_mappings() 메서드 사용
from sqlalchemy.orm import sessionmaker
# 세션 생성
session = sessionmaker(bind=engine)()
# DataFrame을 삽입
session.bulk_insert_mappings(User, df.to_dict(orient="records"))
# 변경 사항 커밋
session.commit()
# 세션 종료
session.close()
bulk_insert_mappings()
메서드는 SQLAlchemy ORM을 사용하여 DataFrame을 삽입하는 데 사용됩니다.User
는 데이터베이스 모델 클래스입니다.
장점 및 단점
executemany()
메서드는 간단하지만 ORM을 사용하지 않습니다.bulk_insert_mappings()
메서드는 ORM을 사용하지만 더 복잡합니다.
python sql-server pandas