Tôi có một tệp CSV chứa 10 cột. Tôi chỉ muốn chọn một số cột từ tệp đó và tải chúng vào cơ sở dữ liệu MySQL bằng LOAD DATA INFILE
lệnh.
Tôi có một tệp CSV chứa 10 cột. Tôi chỉ muốn chọn một số cột từ tệp đó và tải chúng vào cơ sở dữ liệu MySQL bằng LOAD DATA INFILE
lệnh.
Câu trả lời:
Tải dữ liệu vào một bảng trong MySQL và chỉ định các cột:
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;
@ col1,2,3,4 là các biến để giữ tên các cột tệp csv (giả sử 4), id là các cột của bảng.
for i in range(1,100): print("@column",i,",",end="",sep="")
LOAD DATA INFILE 'file.csv'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
Chỉ cần thay thế column1, column2, v.v. bằng các tên cột của bạn và đặt @dummy ở nơi có cột trong CSV mà bạn muốn bỏ qua.
Chi tiết đầy đủ tại đây .
(field,names)
ngay trước dấu chấm phẩy ở cuối để nó hoạt động.
Chỉ định tên của các cột trong CSV trong câu lệnh tệp trong tệp dữ liệu tải.
Mã như thế này:
LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
Ở đây, bạn chỉ thêm dữ liệu vào hai cột (bạn có thể chọn chúng cùng với tên của cột) vào bảng.
Điều duy nhất bạn phải quan tâm là bạn có một tệp CSV (filename.csv) với hai giá trị trên mỗi dòng (hàng). Nếu không xin vui lòng đề cập. Tôi có một giải pháp khác.
Cảm ơn bạn.
Thí dụ:
nội dung của tệp ae.csv:
"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"
CREATE TABLE Tabletmp (
rec VARCHAR(9)
);
Đối với chỉ đặt cột 3:
LOAD DATA INFILE '/local/ae.csv'
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;
select * from Tabletmp;
2016
1982
1986
1400
nếu bạn có số cột trong bảng cơ sở dữ liệu nhiều hơn số cột trong csv của mình, bạn có thể tiến hành như sau:
LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);
Đối với những người gặp lỗi sau:
Mã lỗi: 1290. Máy chủ MySQL đang chạy với tùy chọn --secure-file-priv nên nó không thể thực thi câu lệnh này
Bạn chỉ cần chạy lệnh này để xem thư mục nào có thể tải tệp từ:
SHOW VARIABLES LIKE "secure_file_priv";
Sau đó, bạn phải sao chép các tệp trong thư mục đó và chạy truy vấn với LOAD DATA LOCAL INFILE
thay vì LOAD DATA INFILE
.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
.