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());