MySQL 將查詢結果匯出到檔案
平常我們一直用的是 Navicat for MySQL 這樣一個圖形化工具來將查詢結果匯出至 Excel 檔案。但是最近由於業務的需要,必須採用 SQL 語句來將查詢結果匯出至檔案。在網上查詢了相關資料並結合自己實踐之後,總結如下。
首先檢視 secure_file_priv 配置項,找到檔案輸出路徑
方法1:通過 MySQL 下的配置檔案 my.ini 進行設定,Ctrl+F 查詢 secure-file-priv ,然後將路徑改為你要匯出檔案的儲存路徑。
方法2:通過命令 SHOW VARIABLES LIKE '%secure%';
檢視路徑。
特別注意:secure-file-priv 這個變數不支援動態修改,因此修改後必須重啟 MySQL 服務。
接著一定要將匯出的檔案設定為 MySQL 可以寫的許可權
Windows 下,在資料夾中右鍵->屬性->安全->選擇一個使用者,然後編輯它的許可權。注意:寫入許可權是一定要有的。
如果匯出的路徑不對,或者沒有對應的許可權。那麼在執行程式的時候都會報如下錯誤。
ERROR 1290(HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
然後,我們就可以開始匯出結果了。語法就參考下面的 example 吧,LZ 有點懶 ^v^
SELECT "使用者名稱", "密碼", "身份" UNION ALL
SELECT u.UserName, u.PassWord, u.Status FROM news_tagging_app_user as u INTO OUTFILE 'D:/PythonProject/news_tagging_system/news_tagging_app/static/tag_user_result.csv'
CHARACTER SET gbk #將查詢結果轉換為GB2312格式
FIELDS TERMINATED BY ',' #指定列之間分隔符
LINES TERMINATED BY '\r\n' #'\r'換行符, '\n'新行符
;
----------------------------------------------------------------------------------------------------------------------------
補充說明:
① 在描述路徑的時候注意是左斜槓,要與 Windows 系統中的右斜槓進行區分。
② 用 UNION ALL 來達到新增表頭的目的。具體的 UNION 和 UNION ALL 的用法參考該頁面。
③ 其他見註釋。
----------------------------------------------------------------------------------------------------------------------------
新的問題來了,如果匯出的檔案已存在如何實現對原有檔案的覆蓋
預設情況下是會報錯,提示檔案已存在。
[Err] 1086 - File 'D:/PythonProject/news_tagging_system/news_tagging_app/static/tag_user_result.csv' already exists
解決思路:
方法1:在匯出之前通過 bat 批處理指令碼先判斷檔案是否存在,若存在則刪除,然後再匯出結果。這個方法的弊端在於要同時執行兩個定時器,一個是 Windows 平臺上的計劃任務用於定時執行 bat批處理檔案,另一個則是資料庫中有一個定時器,用於定時匯出結果。二者只要一個出了問題都會導致系統出現 Bug,無疑會降低系統的魯棒性,並且如何讓二者在一先一後的情況下如何做到無縫對接也是一個大問題,因此該方法不推薦使用。
方法2:對檔案進行動態命名,保證每次命名都不一致,並且能保證有規律可循,能簡單高效找到最新匯出的版本。*請參看下一篇文章《MySQL 將查詢結果匯出到檔案(續)》。
附
該文章於2017年9月29日於CSDN上首次發表,2017年12月24日搬家至此!
相關文章
- mysql匯出查詢結果MySql
- MySQL查詢結果匯出方式總結MySql
- 將命令列提示符裡的執行結果匯出到text檔案中命令列
- UTL_FILE包,將查詢結果寫入檔案
- navicat 匯出查詢結果
- mysql匯出select結果到檔案MySql
- 如何將資料熱匯出到檔案
- mysql查詢結果多列拼接查詢MySql
- 將dataGridView內容匯出到Excel檔案ViewExcel
- DBeaver 匯出多個查詢結果集
- 將MYSQL中資料匯出到EXCEL表MySqlExcel
- 利用資料泵匯出查詢結果(二)
- 利用資料泵匯出查詢結果(一)
- 實用小指令碼——mysql/mongo 匯出到本地檔案指令碼MySqlGo
- 檔案批次查詢複製匯出,按檔名批次查詢檔案,按檔案內容批次查詢檔案
- 從hive將資料匯出到mysql(轉)HiveMySql
- 使用navicat匯出查詢大量資料結果集並匯入到其他資料庫(mysql)資料庫MySql
- 極兔快遞怎麼查詢物流資訊 支援匯出查詢結果嗎?
- MySQL 查詢結果取交集的實現方法MySql
- 為 MySQL 的查詢結果新增排名欄位MySql
- MySQL 清空慢查詢檔案MySql
- [Mysql 查詢語句]——對查詢結果進一步的操作MySql
- 使用ROWNUM將導致查詢結果集的固化
- Oracke大欄位Blob匯出到檔案
- MySQL pager和nopager命令--不顯示查詢結果MySql
- 將資料匯出到ExcelExcel
- MySQL匯入匯出檔案檔案MySql
- 【記錄】sqlserver列轉行查詢 並將查詢結果用逗號分隔開SQLServer
- mysql中的多行查詢結果合併成一個MySql
- MSSQL資料匯出到MYSQLMySql
- MySQL的my.ini檔案查詢MySql
- Docker將映象檔案釋出到私服庫Docker
- Mybatis模糊查詢結果為空MyBatis
- ps aux查詢結果解釋UX
- 巧用臨時表將大結果集轉換為小結果集驅動查詢薦
- Mybatis 查詢語句結果集總結MyBatis
- 查詢dmp檔案(exp方式匯出) 字符集
- 檔案查詢