import csv to mysql/sqlite

156
18 августа 2018, 09:50

Существует некий csv файл

geoname_id,locale_code,continent_code,continent_name,country_iso_code,country_name,subdivision_1_iso_code,subdivision_1_name,subdivision_2_iso_code,subdivision_2_name,city_name,metro_code,time_zone,is_in_european_union
333750,en,AF,Africa,ET,Ethiopia,SN,"Southern Nations, Nationalities, and People's Region",,,Jinka,,Africa/Addis_Ababa,0
333772,en,AF,Africa,ET,Ethiopia,OR,Oromiya,,,Jimma,,Africa/Addis_Ababa,0
333795,en,AF,Africa,ET,Ethiopia,SO,Somali,,,Jijiga,,Africa/Addis_Ababa,0
335035,en,AF,Africa,ET,Ethiopia,HA,"Harari Region",,,Harar,,Africa/Addis_Ababa,0
336014,en,AF,Africa,ET,Ethiopia,AM,Amhara,,,Gondar,,Africa/Addis_Ababa,0
336015,en,AF,Africa,ET,Ethiopia,AM,Amhara,,,Gonder,,Africa/Addis_Ababa,0
337405,en,AF,Africa,ET,Ethiopia,GA,Gambela,,,Gambela,,Africa/Addis_Ababa,0
337996,en,AF,Africa,ET,Ethiopia,,,,,,,Africa/Addis_Ababa,0
338010,en,AF,Africa,ER,Eritrea,,,,,,,Africa/Asmara,0

При попытке импорта в mysql или sqlite3 он ругается на строку 333750,en,AF,Africa,ET,Ethiopia,SN,"Southern Nations, Nationalities, and People's Region",,,Jinka,,Africa/Addis_Ababa,0 из-за несоответствия кол-ва столбцов и разделителей (,) . Подскажите пожалуйста, как всё-таки правильно залить такой файл в эти БД?

Answer 1
SQLite

Создаем файл csv-2-dsv.php

<?php
while(($data = fgetcsv(STDIN)) !== false) {
  fputcsv(STDOUT, $data, $argv[1] ? $argv[1] : ";", '"');
}

Теперь с помощью его конвертируем:

cat data.csv | php csv-2-dsv.php ";" > out.csv

Последний параметр ";" - разделитель в выходном файле.

Входим в оболочку SQLite

sqlite3 test

Выполяем импорт в таблицу test

.import out.csv test
MySQL
LOAD DATA INFILE '/path/file.csv' INTO TABLE `table` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
READ ALSO
MySQL выбор синонимов иностранного слова

MySQL выбор синонимов иностранного слова

Имеется база словаря (англо-малайский): http://sqlfiddlecom/#!9/716dc2/1

148
Ошибка 1064 SQL syntax

Ошибка 1064 SQL syntax

У меня ошибка SQL syntax errorПочеркивает почему-то слово system (таблица в базе данных на скриншоте видно)

178
Запуск события в промежутке времени в MySQL

Запуск события в промежутке времени в MySQL

Есть эвент в MySQL, который нужно запускать каждый день лишь в определенные часы (пн - с 8:00 до 9:00, вт - с 16:00 до 19:00 к примеру)При чем должен запускаться...

181
If not exist по 2 колоннам

If not exist по 2 колоннам

Как изменить запрос, что-бы создавался новый пользователь, если нету с id и peer_id в связке?

182