Як вставити вибрані стовпці з CSV-файлу в базу даних MySQL, використовуючи LOAD DATA INFILE


83

У мене є файл CSV, який містить 10 стовпців. Я хочу вибрати лише деякі стовпці з цього файлу та завантажити їх у базу даних MySQL за допомогою LOAD DATA INFILEкоманди.

Відповіді:


118

Завантажте дані в таблицю в MySQL і вкажіть стовпці:

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 - це змінні, що містять ім'я стовпців файлу csv (припустимо 4), ідентифікатори - стовпці таблиці.


2
Я запустити свою відповідь в MySQL і з'являється повідомлення про помилку: ERROR 1148 (42000): The used command is not allowed with this MySQL version.
shgnInc 02


8
Що робити, якщо у мене є 100 стовпців, і я просто хочу імпортувати 2 стовпці, тоді слід писати (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2; або є простий спосіб?
Дхарма

@Dharma програма пітон 3 надрукувати 100 імен стовпцівfor i in range(1,100): print("@column",i,",",end="",sep="")
Agnel Вишал

39
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';

Просто замініть стовпці1, стовпці2 і т. Д. Іменами ваших стовпців і вставте @dummy туди, де в CSV є стовпець, який ви хочете проігнорувати.

Повна інформація тут .


5
Я отримую синтаксичну помилку, коли запускаю щось подібне. Мені доводиться ставити (field,names)перед крапкою з комою в кінці, щоб вона працювала.
Стівен Остерміллер

1
Це не масштабується, якщо ви не знаєте, що надходять усі стовпці csv.
Чарльз Хармон,

4
як F це +38 голосів? Це неправильний синтаксис SQL.
Джон

34

Вкажіть ім'я стовпців у CSV в операторі завантаження даних у файлі.

Код такий:

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);

Тут ви додаєте дані до таблиці лише до двох стовпців (їх можна вибрати з назвою стовпця).

Єдине, про що потрібно подбати, це те, що у вас є файл CSV (ім’я файлу.csv) з двома значеннями на рядок (рядок). В іншому випадку, будь ласка, згадайте. У мене інше рішення.

Дякую.


2
ймовірно, інші відповіді трохи застарілі. цей працював у мене з MySQL 5.6
Фабіо Наподано

Дякуємо, що вказали повний шлях до файлу. Якусь мить я шукав каталог MySQL, в який я повинен помістити файл csv!
Shrinath

1
Цей працює найкраще, хоча шлях повинен йти від дозволених безпечних зон. Запустіть цю команду ПОКАЗАТИ ЗМІННІ ТАКИХ, ЩО "secure_file_priv"; а потім скиньте файл csv у це місце
Ганеш Кришнан

1
Погодьтеся з @FabioNapodano. Для мого v5.7 мені потрібно було поставити імена стовпців у кінці виписки.
Енн Ганн,

На жаль, це не відповідає на питання. Це вимагає, щоб у .csv було два стовпці та вставляло їх у два конкретні стовпці в БД. Постер вимагає витягування 2 стовпців із csv 10.
daprezjer

12

Приклад:

вміст файлу 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) 
);

Лише для стовпця 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

1
Приклади завжди кращі
П’єр де ЛЕСПІНЕЙ

3

якщо у вашій таблиці бази даних кількість стовпців перевищує кількість стовпців у вашому csv, ви можете діяти так:

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,...);

0

Для тих, у кого є така помилка:

Код помилки: 1290. Сервер MySQL працює з опцією --secure-file-priv, тому він не може виконати цей оператор

Ви можете просто виконати цю команду, щоб побачити, з якої папки можна завантажувати файли:

SHOW VARIABLES LIKE "secure_file_priv";

Після цього вам потрібно скопіювати файли в цій папці та виконати запит LOAD DATA LOCAL INFILEзамість LOAD DATA INFILE.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.