Python으로 MySQL 쿼리 결과를 CSV 파일에 쓰기 (필드 이름 포함)
필수 라이브러리
먼저, 다음 라이브러리를 설치해야 합니다:
mysql-connector
: Python에서 MySQL 서버와 상호 작용하는 데 사용되는 라이브러리입니다.csv
: CSV 파일을 읽고 쓰는 데 사용되는 표준 Python 라이브러리입니다.
단계별 안내
- MySQL 서버에 연결하기:
import mysql.connector
db = mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="database_name"
)
위 코드에서 host
, user
, password
, database_name
을 실제 MySQL 서버 정보로 변경해야 합니다.
- 쿼리 실행 및 결과 가져오기:
cursor = db.cursor()
cursor.execute("SELECT * FROM table_name")
results = cursor.fetchall()
위 코드에서 table_name
을 원하는 테이블 이름으로 변경해야 합니다. results
변수에는 쿼리 결과가 포함된 튜플 목록이 저장됩니다.
- CSV 파일 열기:
with open("output.csv", "w", newline="") as csvfile:
csv_writer = csv.writer(csvfile)
위 코드에서 output.csv
를 원하는 CSV 파일 이름으로 변경합니다. csv_writer
객체는 CSV 파일에 데이터를 쓰는 데 사용됩니다.
- 필드 이름 쓰기:
field_names = [i[0] for i in cursor.description]
csv_writer.writerow(field_names)
위 코드는 쿼리 결과의 첫 번째 행에서 필드 이름을 추출하여 CSV 파일에 첫 번째 행으로 씁니다.
- 쿼리 결과 쓰기:
for row in results:
csv_writer.writerow(row)
위 코드는 쿼리 결과의 각 행을 CSV 파일에 하나씩 씁니다.
db.close()
실행 예제
import mysql.connector
import csv
db = mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="database_name"
)
cursor = db.cursor()
cursor.execute("SELECT * FROM customers")
results = cursor.fetchall()
with open("customers.csv", "w", newline="") as csvfile:
csv_writer = csv.writer(csvfile)
field_names = [i[0] for i in cursor.description]
csv_writer.writerow(field_names)
for row in results:
csv_writer.writerow(row)
db.close()
위 예제는 customers
테이블의 모든 데이터를 customers.csv
파일에 필드 이름과 함께 씁니다.
참고:
- 위 코드는 기본적인 예시이며, 실제 상황에 따라 수정해야 할 수도 있습니다.
- 데이터베이스에 많은 양의 데이터가 있는 경우, 한 번에 모든 데이터를 로드하는 대신, 반복적으로 처리하는 것이 더 효율적일 수 있습니다.
- CSV 파일 형식 외에도 다른 파일 형식으로 데이터를 저장할 수도 있습니다.
import mysql.connector
import csv
# MySQL 서버에 연결하기
db = mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="database_name"
)
# 쿼리 실행 및 결과 가져오기
cursor = db.cursor()
cursor.execute("SELECT * FROM customers")
results = cursor.fetchall()
# CSV 파일 열기
with open("customers.csv", "w", newline="") as csvfile:
# CSV 작성 객체 만들기
csv_writer = csv.writer(csvfile)
# 필드 이름 추출 및 쓰기
field_names = [i[0] for i in cursor.description]
csv_writer.writerow(field_names)
# 쿼리 결과 쓰기
for row in results:
csv_writer.writerow(row)
# MySQL 서버 연결 닫기
db.close()
라이브러리 불러오기:
mysql.connector
: MySQL 서버와 상호 작용하는 데 사용됩니다.csv
: CSV 파일을 읽고 쓰는 데 사용됩니다.
쿼리 실행:
SELECT * FROM customers
쿼리는customers
테이블의 모든 데이터를 선택합니다.cursor.fetchall()
메서드는 쿼리 결과를 튜플 목록으로 반환합니다.
open()
함수를 사용하여customers.csv
파일을 쓰기 모드로 엽니다.newline=""
매개 변수는 Windows에서도 올바르게 작동하도록 합니다.
CSV 작성 객체 만들기:
필드 이름 추출 및 쓰기:
cursor.description
은 쿼리 결과의 필드 정보를 포함하는 튜플을 반환합니다.- 각 필드의 첫 번째 요소는 필드 이름입니다.
csv_writer.writerow()
메서드를 사용하여 필드 이름 목록을 CSV 파일에 첫 번째 행으로 씁니다.
for
루프를 사용하여 쿼리 결과의 각 행을 순회합니다.- 각 행은 튜플 형식입니다.
Python으로 MySQL 쿼리 결과를 CSV 파일에 쓰는 다른 방법
pandas 라이브러리 사용:
pandas 라이브러리는 데이터 분석 및 처리 작업에 유용한 라이브러리입니다.
import pandas as pd
import mysql.connector
# MySQL 서버에 연결하기
db = mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="database_name"
)
# 쿼리 실행 및 데이터프레임으로 변환
cursor = db.cursor()
cursor.execute("SELECT * FROM customers")
data = cursor.fetchall()
df = pd.DataFrame(data)
# CSV 파일로 저장
df.to_csv("customers.csv", index=False)
# MySQL 서버 연결 닫기
db.close()
위 코드는 다음과 같은 작업을 수행합니다.
pandas
라이브러리를 불러옵니다.- 쿼리를 실행하고 결과를
data
변수에 저장합니다. data
를pandas.DataFrame
으로 변환합니다.DataFrame
을customers.csv
파일에 CSV 형식으로 저장합니다.
SQLAlchemy 라이브러리 사용:
SQLAlchemy는 객체 관계 매핑(ORM)을 사용하여 Python에서 데이터베이스와 상호 작용하는 데 도움이 되는 라이브러리입니다.
import sqlalchemy as sa
# 엔진 생성
engine = sa.create_engine("mysql+pymysql://username:password@host:port/database_name")
# 메타데이터 생성
metadata = sa.MetaData(engine)
# 테이블 객체 생성
customers_table = sa.Table("customers", metadata,
sa.Column("id", sa.Integer, primary_key=True),
sa.Column("name", sa.String(255)),
sa.Column("email", sa.String(255)),
sa.Column("created_at", sa.DateTime))
# 모든 데이터를 선택하고 CSV 파일에 저장
with open("customers.csv", "w", newline="") as csvfile:
csv_writer = csv.writer(csvfile)
# 모든 customers 데이터를 조회
query = sa.select(customers_table)
result = engine.execute(query)
# 필드 이름 쓰기
csv_writer.writerow([column.name for column in customers_table.columns])
# 쿼리 결과 쓰기
for row in result:
csv_writer.writerow(row)
pymysql 라이브러리 및 csv 모듈 사용:
import pymysql
import csv
# MySQL 서버에 연결하기
conn = pymysql.connect(
host="localhost",
user="username",
password="password",
database="database_name",
charset='utf8mb4'
)
# 커서 객체 얻기
cursor = conn.cursor()
# 쿼리 실행 및 결과 가져오기
cursor.execute("SELECT * FROM customers")
results = cursor.fetchall()
# CSV 파일 열기
with open("customers.csv", "w", newline="") as csvfile:
# CSV 작성 객체 만들기
csv_writer = csv.writer(csvfile)
# 필드 이름 추출 및 쓰기
field_names = [i[0] for i in cursor.description]
csv_writer.writerow(field_names)
# 쿼리 결과 쓰기
for row in results:
csv_writer.writerow(row)
# 커서 및 연결 닫기
cursor.close()
conn.close()
- 각 방법마다 장단점이 있으므로, 상황에 맞는 방법을 선택해야 합니다.
- pandas 및 SQLAlchemy는 더 복잡한 데이터 처리 작업에 유용할 수 있지만, 코드가 더 길어질 수 있습니다.
- pymysql은 더 간단하지만, pandas 및 SQLAlchemy만큼 기능이 풍부하지 않을 수 있습니다.
- 사용하는 라이브러리에 따라 추가 설치가 필요할 수 있습니다.
추가 정보:
python mysql csv