본문 바로가기
Big Data/Database

MySQL에 csv 파일 데이터 적재

by Wikinist 2023. 8. 2.

방법 1: LOAD DATA INFILE을 사용한 데이터 적재

이 방법은 MySQL의 LOAD DATA INFILE 명령을 사용하여 데이터를 파일에서 직접 데이터베이스 테이블로 로드하는 방법입니다.

-- LOAD DATA INFILE을 사용하여 데이터 로드
SHOW VARIABLES LIKE 'FOREIGN_KEY_CHECKS';
SET foreign_key_checks = 0;

LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\tft_match_traits_20230802.csv'
INTO TABLE tftdb.match_trait
FIELDS TERMINATED BY ','
IGNORE 1 LINES;

SET foreign_key_checks = 1;
SHOW VARIABLES LIKE 'FOREIGN_KEY_CHECKS';

위의 SQL 코드는 다음과 같은 역할을 합니다:

LOAD DATA INFILE: 데이터 파일을 로드하는 MySQL 명령어입니다.
'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\tft_match_players_20230802.csv': 로드할 데이터 파일의 경로를 지정합니다.

  • 파일의 경로는 C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\ 하위에만 가능합니다.

INTO TABLE tftdb.match_player: 데이터를 적재할 데이터베이스 테이블을 지정합니다.
FIELDS TERMINATED BY ',': 각 필드가 쉼표로 구분되었음을 명시합니다.
IGNORE 1 LINES: 데이터 파일의 첫 번째 줄을 무시하고 데이터 로드를 시작합니다.

방법 2: pandas와 SQLAlchemy를 사용한 데이터 적재

이 방법은 Python 라이브러리인 pandas와 SQLAlchemy를 사용하여 데이터를 데이터베이스 테이블로 적재하는 방법입니다.

import pandas as pd
from sqlalchemy import create_engine

# MySQL 데이터베이스 연결 정보
json_file_path = r'.\product\results\tft_players.json'
username = 'root'
password = 'xxxx'
host = 'localhost'
port = '3306'
database = 'tftdb'

# MySQL 연결 문자열 생성
engine = create_engine(f"mysql+mysqlconnector://{username}:{password}@{host}:{port}/{database}")

# DataFrame 생성
df = pd.read_json(json_file_path)

# DataFrame을 MySQL 데이터베이스의 테이블로 저장
table_name = 'player'
df.to_sql(name=table_name, con=engine, if_exists='append', index=False)

위의 Python 코드는 다음과 같은 역할을 합니다:

import pandas as pd: pandas 라이브러리를 임포트합니다.
from sqlalchemy import create_engine: SQLAlchemy의 create_engine 함수를 임포트하여 MySQL 데이터베이스에 연결합니다.
json_file_path = r'.\product\results\tft_players_edit.json': 읽어올 JSON 파일의 경로를 지정합니다.
engine = create_engine(f"mysql+mysqlconnector://{username}:{password}@{host}:{port}/{database}"): MySQL 데이터베이스에 연결하는 엔진을 생성합니다.
df = pd.read_json(json_file_path): JSON 파일을 pandas DataFrame으로 읽어옵니다.
df.to_sql(name=table_name, con=engine, if_exists='append', index=False): DataFrame을 MySQL 데이터베이스의 테이블로 저장합니다. if_exists 매개변수가 'append'로 설정되어 있으므로 데이터가 테이블에 추가로 적재됩니다.
이제 각 방법이 어떻게 동작하는지 이해하실 수 있을 것입니다.

 


참고:

https://dev.mysql.com/doc/refman/8.0/en/load-data.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.2.9 LOAD DATA Statement

13.2.9 LOAD DATA Statement LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [PARTITION (partition_name [, partition_name] ...)] [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'

dev.mysql.com

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > Database' 카테고리의 다른 글

REGEXP  (0) 2023.08.04
CASE WHEN  (0) 2023.08.04
MySQL에서 UnixTime  (0) 2023.07.31
LAG & LEAD 함수  (0) 2023.07.27
WINDOW 절의 사용  (0) 2023.07.27