mysql 사전설정 필수
docker exec -it <컨테이너명> bash
mysql -u <유저명> -p
비번치고 들어가서 쿼리 준비되면
set global local_infile = 1;
SHOW VARIABLES LIKE 'local_infile';
각각 1줄씩 입력

ON 으로 값이 확인되면 DB 에서는 받을 준비가 된상태
이제 VScode 등으로 파이썬이 준비되면
pip install cryptography pymysql 등 자기가 필요한 라이브러리(?) 를 깔아줍니다.
이제 각자 만든 파이썬을 실행시키면

성공!!
사용한 py
import os
import glob
import pymysql
import logging
# 로깅 설정
logging.basicConfig(
filename='import_log_load_data_infile.log',
level=logging.INFO,
format='%(asctime)s:%(levelname)s:%(message)s'
)
# 환경 변수에서 MySQL 연결 정보 가져오기
username = os.getenv('MYSQL_USER', 'root')
password = os.getenv('MYSQL_PASSWORD', 'AKJ1passwd')
host = os.getenv('MYSQL_HOST', 'localhost')
port = int(os.getenv('MYSQL_PORT', '3306'))
database = os.getenv('MYSQL_DATABASE', 'flight_data')
table_name = os.getenv('MYSQL_TABLE', 'AutoIncrement')
csv_directories = [
'D:/FlightData',
'D:/day15to23',
'D:/airportstring_ICN'
]
# MySQL 연결 생성
try:
connection = pymysql.connect(
host=host,
user=username,
password=password,
database=database,
port=port,
local_infile=True # LOAD DATA LOCAL INFILE 사용을 위해 설정
)
except pymysql.MySQLError as e:
print(f"데이터베이스 연결 오류: {e}")
logging.error(f"데이터베이스 연결 오류: {e}")
exit(1)
cursor = connection.cursor()
# CSV 임포트 루프
for csv_dir in csv_directories:
file_pattern = os.path.join(csv_dir, '*.csv')
csv_files = glob.glob(file_pattern)
csv_files.sort()
print(f"디렉토리 '{csv_dir}'에서 임포트할 파일 개수: {len(csv_files)}")
logging.info(f"디렉토리 '{csv_dir}'에서 임포트할 파일 개수: {len(csv_files)}")
for file in csv_files:
try:
print(f"파일 임포트 중: {file}")
logging.info(f"파일 임포트 중: {file}")
# Windows 경로를 UNIX 스타일로 변환
unix_file_path = file.replace('\\', '/')
# LOAD DATA LOCAL INFILE 명령어 작성
sql = f"""
LOAD DATA LOCAL INFILE '{unix_file_path}'
INTO TABLE {table_name}
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\\n'
IGNORE 1 ROWS;
"""
cursor.execute(sql)
connection.commit()
print(f"성공적으로 임포트됨: {file}")
logging.info(f"성공적으로 임포트됨: {file}")
except pymysql.MySQLError as e:
print(f"MySQL 오류 발생 (파일: {file}): {e}")
logging.error(f"MySQL 오류 발생 (파일: {file}): {e}")
connection.rollback()
except Exception as e:
print(f"오류 발생 (파일: {file}): {e}")
logging.error(f"오류 발생 (파일: {file}): {e}")
# 연결 종료
cursor.close()
connection.close()
print("모든 파일 임포트 완료!")
logging.info("모든 파일 임포트 완료!")
'SQL&DB' 카테고리의 다른 글
| mysql 입력 이상하게 될때 (0) | 2025.02.10 |
|---|---|
| 도커 컴포즈 정리 (0) | 2025.02.10 |
| Docker 에서 구동하는 DB 에 데이터 넣기 (0) | 2025.02.07 |
| 테이블 만들고 인덱싱까지 하기 (0) | 2025.02.06 |
| Docker 에 Mysql 깔고 수정하기 (0) | 2025.02.05 |