После попытки в течение целого дня, я надеюсь, что кто-то здесь может помочь мне заставить работать нижеприведенный скрипт. Я объединил информацию из нескольких потоков ( пример ) и веб-сайтов, но не могу заставить ее работать.
Что я пытаюсь сделать:
Я пытаюсь получить базу данных MariaDB10 с именем stock_db на моем NAS-устройстве Synology, чтобы загрузить все файлы * .csv из определенной папки (где я сохраняю загруженные исторические цены акций) и добавить их в таблицу, называемую «цены». ». Все файлы одинаково называются "price_history _ ' isin '. Csv".
Приведенный ниже оператор SQL работает при отдельном запуске из HeidiSQL на моем компьютере с Windows:
Рабочий SQL
LOAD DATA LOW_PRIORITY LOCAL INFILE 'D:\\Downloads\\price_history_NL0010366407.csv'
IGNORE INTO TABLE `stock_db`.`prices`
CHARACTER SET utf8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@vdate, @vprice)
SET
isin = 'NL0010366407',
date = STR_TO_DATE(@vdate, '%d-%m-%Y'),
price = @vprice
;
выпуск
К сожалению, когда я пытаюсь выполнить пакетную загрузку всех CSV-файлов из папки на моем NAS с помощью приведенного ниже сценария, я получаю ту же ошибку.
#!/bin/bash
for filename in ./price_history/*.csv; do
echo $filename
isin=${filename:30:12}
echo $isin
/volume1/@appstore/MariaDB10/usr/local/mariadb10/bin/mysql -u root -p \
"LOAD DATA LOW_PRIORITY LOCAL INFILE '$filename'\
IGNORE INTO TABLE 'stock_db.prices'\
CHARACTER SET utf8\
FIELDS TERMINATED BY ';'\
OPTIONALLY ENCLOSED BY '"'"'"'\
ESCAPED BY '"'"'"'\
LINES TERMINATED BY '\r\n'\
IGNORE 2 LINES (@vdate, @vprice)\
SET\
isin = '$isin',\
date = STR_TO_DATE(@vdate, '%d-%m-%Y'),\
price = @vprice;"
done
ОШИБКА 1102 (42000): неверное имя базы данных
Что я пробовал
- Взял имя базы данных из stock_db.prices и упомянул его отдельно как [база данных] вне цитируемого оператора SQL - Не работает
- Изменены кавычки вокруг stock_db.prices по-разному - не работает
- Разделил SQL в отдельный файл и сослался на него
- Рассматривается (или даже предпочтительнее) использование оператора PREPARE, но, похоже, я не могу использовать его в сочетании с LOAD DATA ( reference )
Бонусный вопрос
Если кто-то может помочь мне сделать это без необходимости повторного ввода пароля пользователя или ввода пароля в сценарий, это был бы действительно хороший бонус!
Обновление
Исправлена ошибка «Неправильная база данных» путем добавления опции «-e»
Теперь у меня новая ошибка в файлах csv:
ОШИБКА 13 "В доступе отказано"
Пока папки и файлы имеют полный доступ для всех.
У кого-нибудь есть мысли по этому поводу?
Большое спасибо!