[mysql] MySQL 테이블로 CSV 가져 오기

csv 파일을 mysql 테이블에 업로드하는 가장 좋은 / 가장 빠른 방법은 무엇입니까? 데이터의 첫 번째 행을 열 이름으로 사용하고 싶습니다.

발견 :

CSV 파일을 MySQL 테이블로 가져 오는 방법

그러나 유일한 대답은 셸이 아닌 GUI를 사용하는 것이 었습니까?



답변

CSV 파일에서 정보를 가져 오는 스크립트를 작성하는 대신 MYSQL을 여기에 직접 연결하고 다음 SQL 구문을 사용하여 정보를 업로드 할 수 있습니다.

Excel 파일을 MySQL로 가져 오려면 먼저 CSV 파일로 내보내십시오. Excel에서 CSV 파일 끝에 넣었을 수있는 빈 데이터와 함께 생성 된 CSV 파일에서 CSV 헤더를 제거합니다.

그런 다음 다음을 실행하여 MySQL 테이블로 가져올 수 있습니다.

load data local infile 'uniq.csv' into table tblUniq fields terminated by ','
  enclosed by '"'
  lines terminated by '\n'
    (uniqName, uniqCity, uniqComments)

읽어보기 : CSV 파일을 MySQL로 직접 가져 오기

편집하다

귀하의 경우에는 첫 번째 행을 찾고 열 이름으로 할당하기 위해 먼저 인터프리터를 작성해야합니다.


편집 -2

구문 에 대한LOAD DATA MySQL 문서 에서 :

IGNORE number LINES옵션을 사용하여 파일 시작 부분의 행을 무시할 수 있습니다. 예를 들어를 사용 IGNORE 1 LINES하여 열 이름이 포함 된 초기 헤더 행을 건너 뛸 수 있습니다 .

LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;

따라서 다음 문을 사용할 수 있습니다.

LOAD DATA LOCAL INFILE 'uniq.csv'
INTO TABLE tblUniq
FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(uniqName, uniqCity, uniqComments)


답변

다음은 필요한 작업을 수행하는 간단한 PHP 명령 줄 스크립트입니다.

<?php

$host = 'localhost';
$user = 'root';
$pass = '';
$database = 'database';

$db = mysql_connect($host, $user, $pass);
mysql_query("use $database", $db);

/********************************************************************************/
// Parameters: filename.csv table_name

$argv = $_SERVER[argv];

if($argv[1]) { $file = $argv[1]; }
else {
    echo "Please provide a file name\n"; exit; 
}
if($argv[2]) { $table = $argv[2]; }
else {
    $table = pathinfo($file);
    $table = $table['filename'];
}

/********************************************************************************/
// Get the first row to create the column headings

$fp = fopen($file, 'r');
$frow = fgetcsv($fp);

foreach($frow as $column) {
    if($columns) $columns .= ', ';
    $columns .= "`$column` varchar(250)";
}

$create = "create table if not exists $table ($columns);";
mysql_query($create, $db);

/********************************************************************************/
// Import the data into the newly created table.

$file = $_SERVER['PWD'].'/'.$file;
$q = "load data infile '$file' into table $table fields terminated by ',' ignore 1 lines";
mysql_query($q, $db);

?>

첫 번째 행을 기반으로 테이블을 만들고 나머지 행을 가져옵니다. 다음은 명령 줄 구문입니다.

php csv_import.php csv_file.csv table_name


답변

phpadmin을 설치할 수있는 기능이있는 경우 CSV 파일을 데이터베이스로 가져올 수있는 가져 오기 섹션이 있습니다. 헤더를 파일의 첫 번째 줄에 테이블 열 이름이 포함되도록 설정하는 확인란도 있습니다 (선택하지 않은 경우 첫 번째 줄은 데이터의 일부가됩니다.


답변

먼저 csv 파일에있는 동일한 수의 열을 사용하여 데이터베이스에 테이블을 만듭니다.

그런 다음 다음 쿼리를 사용하십시오.

LOAD DATA INFILE 'D:/Projects/testImport.csv' INTO TABLE cardinfo
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'


답변

텍스트 파일 또는 csv 파일에서 데이터를로드하려면 명령은 다음과 같습니다.

load data local infile 'file-name.csv'
into table table-name
fields terminated by '' enclosed by '' lines terminated by '\n' (column-name);

위의 명령에서, 제 경우에는로드 할 열이 하나뿐이므로 “종료”및 “둘러싸인”이 없으므로이를 비워 두었습니다. 그렇지 않으면 프로그래머가 분리 문자를 입력 할 수 있습니다. 예를 들어. , (쉼표) 또는 “또는; 또는 모든 것.

** mysql 버전 5 이상을 사용하는 사용자 **

파일을 mysql에로드하기 전에 아래 견인 줄이 옆에 추가되었는지 확인해야합니다. etc/mysql/my.cnf

my.cnf 명령을 편집하려면

sudo vi /etc/mysql/my.cnf

[mysqld]  
local-infile

[mysql]  
local-infile  


답변

mysql을 “mysql -u -p –local-infile”로 시작하면 정상적으로 작동합니다.


답변

이 작업을 수행하기 위해 몇 가지 코드를 작성했습니다. 몇 가지 스 니펫을 넣겠습니다.

$dir = getcwd(); // Get current working directory where this .php script lives
$fileList = scandir($dir); // scan the directory where this .php lives and make array of file names

그런 다음 CSV 헤더를 가져와 mysql에 가져 오는 방법을 알릴 수 있습니다 (참고 : mysql 열이 csv 열과 정확히 일치하는지 확인).

//extract headers from .csv for use in import command
$headers = str_replace("\"", "`", array_shift(file($path)));
$headers = str_replace("\n", "", $headers);

그런 다음 쿼리를 mysql 서버로 보냅니다.

mysqli_query($cons, '
        LOAD DATA LOCAL INFILE "'.$path.'"
            INTO TABLE '.$dbTable.'
            FIELDS TERMINATED by \',\' ENCLOSED BY \'"\'
            LINES TERMINATED BY \'\n\'
            IGNORE 1 LINES
            ('.$headers.')
            ;
        ')or die(mysql_error());