2011-12-16 8 views
10

Có cách nào để nhập nhiều tệp csv cùng một lúc vào cơ sở dữ liệu MySQL không? Một số loại nhập hàng loạt?Cách nhập nhiều tệp csv vào cơ sở dữ liệu MySQL

Tôi đang chạy trên Mac OSX đang chạy một máy chủ MAMP.

Tôi có 185 tệp csv mà tôi cần nhập vào bảng MySQL. Tôi có thể nhập chúng riêng lẻ bằng cách sử dụng tab nhập của phpMyAdmin, nhưng sẽ mất nhiều thời gian. Có ai biết nếu có một cách tốt hơn?

Trả lời

7

Có một kịch bản PHP ít cho bạn:

#!/usr/bin/php 
<? 
mysql_connect('localhost','root','root'); // MAMP defaults 
mysql_select_db('yourdatabase'); 
$files = glob('*.csv'); 
foreach($files as $file){ 
    mysql_query("LOAD DATA INFILE '".$file."' INTO TABLE yourtable"); 
} 

Xem Manual MySQL cho LOAD DATA INFILE tùy chọn mà phù hợp với tài liệu của bạn.

+0

Điều này có thể được sử dụng để cho phép hàng đầu tiên của dữ liệu được sử dụng làm tên cột? –

10

Sử dụng một kịch bản shell như thế này:

#!/usr/bin/env bash 
cd yourdirectory 
for f in *.csv 
do 
     mysql -e "USE yourDatabase LOAD DATA LOCAL INFILE '"$f"'INTO TABLE yourtable" 
done 
+1

Hi nazar554, Cảm ơn bạn đã đề xuất của bạn. Thật không may, tôi nhận được thông báo lỗi "-bash: mysql: command not found". Tôi không chắc mình đang làm gì sai. – Laxmidi

+1

Ngoài ra, bạn đang gọi mysql một lần cho mỗi tập tin, và đó là khá lãng phí). – einpoklum

+0

Bạn sẽ làm điều này đệ quy như thế nào (với các thư mục con) –

3

Bạn có thể sử dụng một kịch bản shell để lặp qua các tập tin (một điều này giả định họ đang ở trong thư mục hiện hành):

#!/bin/bash 

for f in *.csv 
do 
    mysql -e "load data infile '"$f"' into table my_table" -u username --password=your_password my_database 
done 
+0

Xin chào Tom H, Cảm ơn bạn đã gửi thư. Tôi không biết gì về việc sử dụng bash. Tôi nhận được lỗi này trong Terminal: "-bash:: command not found". Bất kỳ ý tưởng như những gì tôi đang làm sai? Cảm ơn. – Laxmidi

+0

Thay thế chữ shebang bằng chữ cái từ tập lệnh của nazar554 (#!/Usr/bin/env bash). Sau đó bạn sẽ nhận được cùng một lỗi mà bạn nhận được từ của mình (mysql: lệnh không tìm thấy) vì cả hai chúng tôi đã xảy ra để cung cấp cho bạn câu trả lời tương tự. Bạn cần chạy tập lệnh này trên cùng một máy nơi cơ sở dữ liệu của bạn được lưu trữ (hoặc sử dụng công tắc -h để kết nối từ xa), và nó phải có trình khách dòng lệnh mysql được cài đặt. –

2

tôi 've sửa đổi kịch bản của Tom để giải quyết vài vấn đề phải đối mặt

#!/bin/bash 

for f in *.csv 
do 
    mysql -e "load data local infile '"$f"' into table myTable fields TERMINATED BY ',' LINES TERMINATED BY '\n'" -u myUser--password=myPassword fmeter --local-infile 
done 
  1. load data local infile thay vì load data infile: [tệp được tải là cục bộ cho máy chủ mysql]
  2. Đã thêm công tắc phân cách để khớp với dữ liệu của tôi.
  3. --local-infile để bật chế độ tải dữ liệu cục bộ trên máy khách.
0

@hlosukwakha bạn muốn sử dụng mysqlimport. tìm kiếm này cho một bảng có tên như tệp. sử dụng mysqlimport -help để tìm các thông số chính xác, nhưng chúng về cơ bản giống với mysql

1

Để sử dụng các cửa sổ tài khoản đợt này

echo off 
setlocal enabledelayedexpansion 
FOR %%f IN ("*.csv") DO (
    set old=%%~dpnxf 
    set new=!old:\=\\! 
    mysql -e "load data local infile '"!new!"' IGNORE into table email_us.business COLUMNS TERMINATED BY ','" -u root 
    echo %%~nxf DONE 
) 
  • email_us -> DB
  • kinh doanh -> Bảng
  • IGNORE -> Bỏ qua chèn và lỗi trùng lặp tiếp tục
  • ~ dpnxf ->d cho ký tự ổ đĩa, p cho con đường nộp, n cho tên tập tin, x gia hạn và f là tập tin biến

bước: - Đặt rằng batch file trong thư mục nơi mà tất cả nhiều file csv tồn tại và đặt tên nó như something.bat - chạy cmd.exe như adminstrator và gọi tập tin something.bat và tận hưởng nhập khẩu ...