簡體   English   中英

通過bash腳本將多個csv文件加載到MariaDB / MySQL

[英]Loading multiple csv files to MariaDB/MySQL through bash script

經過一整天的嘗試,我希望這里的人可以幫助我完成下面的腳本工作。 我已經合並了來自多個線程( 示例 )和網站的信息,但無法正常工作。


我正在嘗試做的是:

我試圖在Synology NAS上獲取一個名為'stock_db'的MariaDB10數據庫,以從特定文件夾中加載所有* .csv文件(我在其中保存了已下載的歷史股價),並將這些文件添加到名為'prices'的表中。 這些文件都同樣名為“price_history_‘ ISIN ’的.csv”。 當從Windows計算機上的HeidiSQL單獨運行它時,下面的SQL語句有效:

工作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
;

問題

不幸的是,當我嘗試通過以下腳本從NAS上的文件夾中批量加載所有csv時,我總是遇到相同的錯誤。

#!/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分離到一個單獨的文件中,並引用它為“ <stmt.sql”-進一步使事情變得復雜,甚至根本無法正常工作(盡管可能是首選)
  • 考慮(甚至首選)使用PREPARE語句,但似乎我不能將其與LOAD DATA結合使用( 參考

獎金問題

如果有人可以幫助我做到這一點而不必重新輸入用戶密碼或將密碼放入腳本中,那將是非常不錯的獎勵!


更新

通過添加“ -e”選項解決了“錯誤的數據庫錯誤”,現在在csv文件上出現新的錯誤:

錯誤13“權限被拒絕”

文件夾和文件對所有人都具有完全訪問權限。 有人對此有任何想法嗎? 非常感謝!

  1. 嘗試使用-D選項設置數據庫:將第一行更改為/volume1/@appstore/MariaDB10/usr/local/mariadb10/bin/mysql -D stock_db -u root -p \\ ...

  2. 此行中的IGNORE INTO TABLE 'stock_db.prices'\\可能存在錯誤-嘗試刪除單引號。

  3. 在用戶的主目錄中創建文件.my.cnf,並將以下信息放入其中: [client] password="my password" 有關選項文件的信息。

'stock_db.prices'

報價不正確。 這將起作用,因為關鍵字都不是:

stock_db.prices

這也將起作用:

`stock_db`.`prices`

請注意,數據庫名稱和表名稱使用反斜線分別引用。

我無法預測這場噩夢會發生什么:

'"'"'"'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM